알고리즘

[python] 1267번 휴대폰 요금

게르마늄팔찌전도사 2023. 9. 21. 20:52

문제

동호는 새악대로 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
num = int(input())
time = list(map(int, input().split()))
= 0
= 0
 
for i in range (num):
        y += ((time[i]//30)+1)*10
        m += ((time[i]//60)+1)*15
 
    
 
if(y < m) :
    print("Y",y)
elif(y > m) :
    print("M", m)
else:
    print("Y M", y,m)
 
cs

 

이렇게 짜보았다  그런데

분명 컴파일에서 예시랑 똑같이 나오는데 틀렸다고 나오기 시작했다. 도무지 이유를 모르겠어서 인터넷에 검색하였는데 

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

이런 식으로 구현한 것을 알 수 있었다. 여기서 나는 의문이 들었다. 나는 이제껏 C++을 학교에서 사용해왔기에 C++이 더 익숙하다. 그래서 문법이 C++로 최대한 구현하는게 편한데  time[i]로 구현했다고 이게 맞고 틀리고를 좌우하나? 

for i in range 문제인지 아니면 내 함수가 문제인지 잘 모르겠다.

무엇이 문제인지 전혀 모르겠어서 더욱 곤란하다.

 

누구한테 이런 걸 물어야할지도 감이 안잡혀서 더욱 어렵다. 역시 그냥 C++ 이나 JAVA를 써야하나 하는 의문이 생겼다.

'알고리즘' 카테고리의 다른 글

이웃한 칸  (1) 2024.05.29
[Leetcode] Max Consecutive Ones  (0) 2024.04.30
[python] 1085번: 직사각형에서 탈출  (0) 2023.09.20
[python] 2525번: 오븐 시계  (2) 2023.09.09
[python] 1924번 2007년  (0) 2023.03.04