안녕하세요.
오늘은 백준 1267번 휴대폰 요금 문제를 풀어보겠습니다.

문제가 좀 길지만 간단하게 요약하면
30초마다 10원씩 청구되는 영식 요금제와
60초마다 15원씩 청구되는 민식 요금제 중에서
어떤 요금제를 사용하는게 더 저렴한지 구하는 프로그램을 작성하는 문제입니다.

입력값은 통화 횟수와 각각의 통화시간입니다.
예를들면 3회 통화했으면 각각 10초, 30초, 20초 이런식으로 값을 입력하면 됩니다.

출력값은 싼 요금제의 이름을 출력하고, 부과 요금을 출력하면 됩니다.
만약 두 요금제의 요금이 같다면, 영식 요금제를 먼저 쓰고, 민식 요금제를 그 다음에 출력해줍니다.
예를 들면 Y M 50 이런식으로 출력하면 됩니다.
풀이 전에 소스코드 먼저 보겠습니다.
count = int(input())
a = 0
b = 0
num = list(map(int, input().split()))
for i in range(count):
a += (num[i]//30+1)*10
b += (num[i]//60+1)*15
if a > b:
print('M', b)
elif a < b:
print('Y', a)
else:
print('Y', 'M', a)
count 변수에 통화횟수를 입력받고,
num 변수에 통화시간을 리스트 형태로 입력받습니다.
마지막으로 변수 a에는 영식 요금제 계산식을, b에는 민식 요금제 계산식을 넣습니다.
요금제 계산식을 살펴보겠습니다.
a += (num[i]//30+1)*10
리스트 형태로 통화시간이 저장되어있는 num 변수에서 인데스를 이용해 통화 시간을 불러오고,
//를 이용해 불러온 통화시간의 몫을 구합니다.
여기서 //는 몫을 구하는 연산자입니다.
일반적으로 /를 이용하면 나눗셈이 가능하지만 //를 이용하면 나머지를 버리고 몫만 구할 수 있습니다.
예를 들어 31초 통화했다면 영식 요금제를 기준으로 30초를 넘었으므로 20원이 부과됩니다.
이때 31을 30으로 나누면 몫이 1입니다.
하지만 30초가 넘었기 때문에 요금이 두번 부과되어야 하므로 몫을 구한 뒤 1을 더해줍니다.
마찬가지로 63초 통화했다면 영식 요금제를 기준으로 30원이 부과됩니다.
63을 30으로 나눈 몫이 2이고, 요금이 총 세번 부과되어야 하므로 몫에 1을 더해주는 겁니다.
이렇게 계산한 값에 통화 요금을 곱해주면 됩니다.
다음은 if문입니다.
if문은 문제에서 다 지정해줘서 간단합니다.
영식 요금제로 계산한 요금과 민식 요금제로 계산한 요금을 비교하여
더 작은 요금을 부과하는 요금제를 출력하면 됩니다.
만약 요금이 같다면 순서대로 영식 요금제와 민식 요금제의 이름을 출력하면 됩니다.
'코딩 > 파이썬' 카테고리의 다른 글
파이썬 클래스 개념 가장 쉽게 이해하기 (2) | 2023.03.21 |
---|---|
[백준 파이썬] 1284번 집 주소 (B3) (0) | 2022.10.06 |
[백준 파이썬] 1247번 부호 (B3) (0) | 2022.09.19 |
[백준 파이썬] 1032번 명령 프롬프트 (B1) (0) | 2022.09.15 |
파이썬 최솟값 구하기(feat.백준 1085 직사각형에서 탈출) (0) | 2022.09.13 |