jyamethyst21 님의 블로그

백준 1267번- '핸드폰 요금' (PYTHON 풀이) 본문

CODING 💻

백준 1267번- '핸드폰 요금' (PYTHON 풀이)

jyamethyst21 2025. 9. 26. 08:14

문제:

 

문제를 이해하는데는 어렵지 않았다.

설명 그대로 영식 요금제는 1초부터 29초까지 10원, 30초부터 59초까지 20원.. 이런식으로 요금이 들고,

민식 요금제는 1초부터 59초까지 15원, 60초부터 119초까지는 30원... 이런식으로 요금이 드니까 동호가 쓴 시간만큼을 기준으로 두 요금제를 비교해서 싼 요금제를 출력하라는 문제이다.

 

풀이:

n = int(input())
a = list(map(int,input().split()))

result1=[]
result2=[]


for j in a:
    result1.append((j // 30 + 1) * 10)
    result2.append((j // 60 + 1) * 15)


if sum(result1) > sum(result2):
    print(f"M {sum(result2)}")
elif sum(result1) < sum(result2):
    print(f"Y {sum(result1)}")
else:
    print(f"Y M {sum(result1)}")

풀이는 다음과 같다. 

쉬운 편인데도 좀 오래 걸렸다. 처음에는 시작부터 두 요금제를 비교하려고 하지 않고 비용이 추가되는 구간에 대해서 어떻게 코딩을 해야하나 고민에 빠져버리는 바람에 딴 길로 샜는데, 그렇게 되면 어려울 것 같아 다시 규칙을 찾으려고 애썼던 것 같다.

그 결과, 두 요금제를 동시에 계산해서 두 개의 리스트에 각각 넣고, 이에 대한 합계를 통해 비교하는 방향으로 풀이하였다.

그러기 위해서는 30과 60을 기준으로 몫을 구해서, 1초라도 사용하면 요금이 드니 1을 추가하고 이 값에 각각 10, 15를 곱해서 금액을 계산하면 된다.

그 후 각 리스트 값을 더해 비교해서 형식대로 출력하면 된다!