문제:

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

풀이방법:

처음에 정답 비율이 30%대이길래 난이도가 있는 문제인 줄 알았는데 생각보다 간단했던 문제였다.

통화한 시간들을 배열에 담고 각 30초, 60초로 나눈 몫에 1을 더하고 10원, 15원을 곱한 것들을 계속 누적해서 더하고 나 중에 이를 비교해 형식에 맞게 출력하면 되는 문제였다.

아마도 정답률이 낮았던 이유가 형식을 맞지 못하게 출력해서 그런 것 같으므로 python의 format을 사용해서 형식을 맞춰 주었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
n=int(input())
times=list(map(int,input().split()))
 
Y,M=0,0
for time in times:
    Y+=(time//30+1)*10
    M+=(time//60+1)*15
        
        
if Y > M:
    print("M {}".format(M))
elif Y==M:
    print("Y M {}".format(Y))
else:
    print("Y {}".format(Y))
cs

문제링크:

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

 

1267번: 핸드폰 요금

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

www.acmicpc.net

 

'Algorithm > Python' 카테고리의 다른 글

[BOJ]2352. 반도체 설계  (0) 2020.03.19
[BOJ]1748. 수 이어 쓰기 1  (0) 2020.03.17
[BOJ]2579. 계단 오르기  (0) 2020.03.10
[BOJ]13458. 시험 감독  (0) 2020.03.05
[BOJ]6588. 골드바흐의 추측  (0) 2020.03.03

+ Recent posts