본문 바로가기

코딩/파이썬

[백준 파이썬] 1267번 휴대폰 요금 (B3)

반응형

안녕하세요.

오늘은 백준 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문은 문제에서 다 지정해줘서 간단합니다.

영식 요금제로 계산한 요금과 민식 요금제로 계산한 요금을 비교하여

더 작은 요금을 부과하는 요금제를 출력하면 됩니다.

만약 요금이 같다면 순서대로 영식 요금제와 민식 요금제의 이름을 출력하면 됩니다.

반응형