백준

[백준/파이썬] 1267번 핸드폰 요금

won-ian 2024. 9. 29. 23:50

※ 문제

동호는 새악대로 T 통신사의 새 핸드폰 옴머나를 샀다. 새악대로 T 통신사는 동호에게 다음 두 가지 요금제 중 하나를 선택하라고 했다.

  1. 영식 요금제
  2. 민식 요금제

영식 요금제는 30초마다 10원씩 청구된다. 이 말은 만약 29초 또는 그 보다 적은 시간 통화를 했으면 10원이 청구된다. 만약 30초부터 59초 사이로 통화를 했으면 20원이 청구된다.

민식 요금제는 60초마다 15원씩 청구된다. 이 말은 만약 59초 또는 그 보다 적은 시간 통화를 했으면 15원이 청구된다. 만약 60초부터 119초 사이로 통화를 했으면 30원이 청구된다.

동호가 저번 달에 새악대로 T 통신사를 이용할 때 통화 시간 목록이 주어지면 어느 요금제를 사용 하는 것이 저렴한지 출력하는 프로그램을 작성하시오.

※ 입력

동호가 저번 달에 이용한 통화의 개수 N이 주어진다. N은 20보다 작거나 같은 자연수이다. 둘째 줄에 통화 시간 N개가 주어진다. 통화 시간은 10,000보다 작거나 같은 자연수이다.

 출력

첫째 줄에 싼 요금제의 이름을 출력한다. 그 후에 공백을 사이에 두고 요금이 몇 원 나오는지 출력한다. 만약 두 요금제의 요금이 모두 같으면 영식을 먼저 쓰고 민식을 그 다음에 쓴다.

영식은 Y로, 민식은 M으로 출력한다

 

 해결방법

이 문제는 영식과 민식의 각각의 요금 지불값을 구하고 비교한 후에 답을 도출해내면 되는 문제이므로 어려운 문제는 아니다. 영식은 0~29,30~59로 범위가 나눠져있고 민식은 0~59까지 이므로 몫연산을 사용하여 각각 30과 60으로 나눠주고 1을 추가해준 후(올림 처리를 해줘야하므로 1을 더한다)에 각각의 요금인 10원과 15원을 곱해주면 된다. 그 후에 영식이 클 때, 민식이 클 때, 영식과 민식의 값이 동일할 때 3가지로 조건을 나눠서 코드를 작성해주면 된다.

 


 파이썬 코드 정리

n = int(input())
lst = list(map(int, input().split()))
Y = 0
M = 0

for i in lst:
    Y += (i // 30 + 1) * 10  
    M += (i // 60 + 1) * 15  

if Y > M:
    print("M", M)
elif Y < M:
    print("Y", Y)
else:
    print("Y M", Y)