본문 바로가기

알고리즘/python

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

반응형

[문제 출처]

https://www.acmicpc.net/problem/1267

 

1267번: 핸드폰 요금

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

www.acmicpc.net

 

[문제 풀이]

 

동호가 n번의 통화를 했을 때, 영식 요금제와 민식 요금제 중에 더 저렴한 요금제를 찾는 문제이다.

 

영식 요금제는 30초마다 10원씩 청구되고, 민식 요금제는 60초마다 15원씩 청구된다.

 

 - 영식 요금제

~29s : 10원

30 ~ 59s : 20원

60 ~ 89s : 30원

...

 

- 민식 요금제

~59s : 15원

60~ 119s : 30원

120 ~ 179s : 45원

 

각각의 경우에 대해서 동호가 내야 할 요금을 구하고 더 저렴한 요금제와 그때의 가격을 출력한다.

 

영식일 경우 Y, 민식일 경우 M, 같을 경우 Y M을 출력한다.

 

 

요금을 계산하기 위해서 통화시간을 30과 60으로 나눠 몫을 올림하고 단위 요금인 10과 15를 곱해주었다.

하지만 이렇게 계산하면 ~30일 때 10원, 31~60일 때 20원 이런 방식으로 요금이 부과되므로, 나눠 떨어지는 경우에는 따로 계산하였다.

#1267
import math

n = int(input())

time = list(map(int, input().split()))

ys = 0
ms = 0

for i in range(n):
  if time[i]%30 == 0:
    y = time[i]/30 + 1
  else:
    y = math.ceil(time[i]/30)
  ys += (y*10)
  
  if time[i]%60 == 0:
    m = time[i]/60 + 1
  else:
    m = math.ceil(time[i]/60)
  ms += (m*15)

if ys < ms:
  print("Y %d" %ys)
elif ys > ms:
  print("M %d" %ms)
else:
  print("Y M %d" %ms)
반응형