본문 바로가기

문제풀이

[백준] 1267번 파이썬 풀이

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

 

1267번: 핸드폰 요금

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

www.acmicpc.net

[문제]

동호는 새악대로 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으로 출력한다.

[예제 입력1]

3
40 40 40

[예제 출력1]

M 45
  • 영식 : 20 + 20 + 20 = 60
  • 민식 : 15 + 15 + 15 = 45

[예제 입력2]

3
61 61 61

[예제 출력2]

Y M 90

[예제 입력3]

2
61 10

[예제 출력3]

Y 40
  • 영식 : 30 + 10 = 40
  • 민식 : 30 + 15 = 45

[예제 입력4]

2
60 65

[예제 출력4]

Y M 60
  • 영식 : 30 + 30 = 60
  • 민식 : 30 + 30 = 60

나의 풀이

num = int(input())

time_num = list(map(int, input().split()))
y_sum = m_sum = 0

for i in range(num):
    y_sum += (time_num[i]//30+1)*10
    m_sum += (time_num[i]//60+1)*15
    print(y_sum, m_sum)
if y_sum > m_sum:
    print("M {}".format(m_sum))
elif y_sum < m_sum:
    print("Y {}".format(y_sum))
else:
    print("Y M {}".format(y_sum))

 

문제를 자세히 읽어보면 코드를 쉽게 작성할 수 있었다.

 

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

따라서, 영식 요금제는 입력되는 값을 30으로 나눈 뒤 10(원)을 곱해주면 되고, 민식 요금제는 입력되는 값을 60으로 나눈 뒤 15(원)를 곱해주면 된다.

 

단, 

  • 영식 요금제는 "29초 또는 그보다 적은 시간을 통화했으면 10원이 청구"
  • 민식 요금제는 "59초 또는 그보다 적은 시간을 통화했으면 15원이 청구"

라는 추가적인 조건이 있으므로, " ((입력값 // 기준값) + 1) * 요금제 " 로 작성하면 된다.

y_sum += (time_num[i]//30+1)*10
 ex) if time_num[i] == 29
 		((29//30) + 1 )*10 = 10
        
m_sum += (time_num[i]//60+1)*15
 ex) if time_num[i] == 59
 		((59//60) + 1 )*15 = 15

 

이렇게 계산된 y_sum, m_sum 값을 비교해주면 된다.

if y_sum > m_sum:
    print("M {}".format(m_sum))
elif y_sum < m_sum:
    print("Y {}".format(y_sum))
else:
    print("Y M {}".format(y_sum))

결과

 

'문제풀이' 카테고리의 다른 글

[백준] 1252번 파이썬 풀이  (0) 2022.03.27
[백준] 1159번 파이썬 풀이  (0) 2022.03.23
[백준] 10870번 파이썬 풀이  (0) 2022.03.21
[백준] 1100번 파이썬 풀이  (0) 2022.03.20
[백준] 1009번 파이썬 풀이  (0) 2022.03.20