본문 바로가기
알고리즘/백준 solved.ac PS

[백준][solved.ac][Bronze 1][Python] 3226번 : 전화 요금

by 빛밤하늘 2021. 5. 24.
반응형

밑의 링크는 백준에서의 문제 링크입니다.

 

3226번: 전화 요금

첫째 줄에 상근이가 건 전화의 수 N이 주어진다. (1 ≤ N ≤ 100) 다음 N개 줄에는 상근이가 건 전화에 대한 정보가 HH:MM DD와 같은 형식으로 주어진다. HH:MM은 전화를 건 시간이며, DD는 통화 시간이

www.acmicpc.net

 

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# readline을 사용하기 위해 import합니다.
from sys import stdin

# 첫째 줄에 상근이가 건 전화의 수 N을 입력합니다.
# 1 <= N <= 100
# 정수형으로 변환합니다.
N = int(stdin.readline())

# 총 전화 요금을 저장할 변수를 선언합니다.
call_cost = 0

# 전화의 수 N만큼 반복합니다.
for call_idx in range(N):
    # 전화를 건 시간 HH:MM, 통화 시간 DD를 공백으로 구분해 입력합니다.
    # DD는 최대 60입니다.
    start_time, DD = stdin.readline().rstrip().split(' ')
    # 통화 시간 DD는 정수형으로 변환합니다.
    DD = int(DD)
    # 통화 시간을 :로 구분해 시 HH, 분 MM으로 분리해줍니다.
    # 각각 정수형으로 변환합니다.
    HH, MM = map(int, start_time.split(':'))
    # 전화가 끝나는 시간의 시를 저장하는 변수를 선언합니다.
    # HH로 초기화해줍니다.
    end_hour = HH
    # 전화가 끝나는 시간의 분을 저장하는 변수를 선언합니다.
    # MM에 DD를 더한 값으로 초기화해줍니다.
    end_minute = MM + DD

    # 전화가 끝나는 시간의 분이 60분 이상이라면
    if end_minute >= 60:
        # 전화가 끝나는 시간의 시에 1을 더해줍니다.
        end_hour += 1
        # 전화가 끝나는 시간의 분에 60을 빼줍니다.
        end_minute -= 60

    # 전화가 끝나는 시간의 시가 24시 이상이라면
    if end_hour >= 24:
        # 전화가 끝나는 시간에 24를 빼줍니다.
        end_hour -= 24

    # 전화를 건 시간의 시 HH와 전화가 끝나는 시간의 시가 모두 7시에서 18시 이내라면
    if 7 <= HH <= 18 and 7 <= end_hour <= 18:
        # 1분에 10원을 곱한 값을 총 전화 요금에 더해줍니다.
        call_cost += DD * 10
    # 전화를 건 시간의 시 HH와 전화가 끝나는 시간의 시가 모두 19시에서 7시 이내라면
    elif (0 <= HH <= 6 or 19 <= HH <= 23) and (0 <= end_hour <= 6 or 19 <= end_hour <= 23):
        # 1분에 5원을 곱한 값을 총 전화 요금에 더해줍니다.
        call_cost += DD * 5
    # 전화를 건 시간의 시가 18시인데 전화가 끝나는 시간의 시가 19시라면
    elif HH == 18 and end_hour == 19:
        # 1분에 10원인 구간과 1분에 5원인 구간을 구분해서 총 전화 요금에 더해줍니다.
        call_cost += 10 * (60 - MM) + 5 * end_minute
    # 전화를 건 시간의 시가 6시인데 전화가 끝나는 시간의 시가 7시라면
    elif HH == 6 and end_hour == 7:
        # 1분에 10원인 구간과 1분에 5원인 구간을 구분해서 총 전화 요금에 더해줍니다.
        call_cost += 5 * (60 - MM) + 10 * end_minute

# 총 전화 요금을 출력합니다.
print(call_cost)

결과

 

첫 번째 출력과 두 번째 출력에서는 

elif (0 <= HH <= 6 or 19 <= HH <= 23) and (0 <= end_hour <= 6 or 19 <= end_hour <= 23): 조건에서

or이 들어가야 되는 부분을 모두 and로 넣어버려 틀렸습니다 결과가 나왔습니다.

 

맞았습니다 결과를 보고나서 다른 사람들의 파이썬 결과를 보니 많은 사람들의 실행 시간 결과가

제가 낸 코드보다 조금씩 앞서 있었습니다.

더 잘한 사람들의 코드를 보고 어떻게 실행 시간을 더 줄일 수 있는지 공부해봐야겠습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글