본문 바로가기
Algorithm Problem Solving/BaekJoon

[BaekJoon] 백준 3226 전화 요금 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 8. 28.
728x90
반응형

BaekJoon 백준 3226 전화 요금 문제는 시간에 따라 전화 요금이 다르다. 상근이가 건 전화에 대한 정보인 상근이가 전화를 건 시간과 통화 시간이 모두 주어졌을 때, 상근이가 건 N번의 전화 수에 대한 총 전화 요금을 구하는 문제이다. 난이도는 Bronze 1이다.

 

BaekJoon 3226 전화 요금 문제 정보

출처

- https://www.acmicpc.net/problem/3226

알고리즘 분류

- 수학, 구현

난이도

- 브론즈 1 / Bronze 1

 

전화 요금 문제 요약

    • 7:00부터 19:00까지 전화 요금은 1분에 10원이다.
    • 19:00부터 7:00까지 전화 요금은 1분에 5원이다.
    • 상근이가 건 전화의 수 N이 주어진다. (1 ≤ N ≤ 100)
    • 상근이가 건 전화에 대한 정보가 HH:MM DD와 같은 형식으로 주어진다.
    • HH:MM은 전화를 건 시간이며, DD는 통화 시간이다. DD는 최대 60이며, MM과 DD사이에는 공백이 하나 주어진다.
    • 만약 시나 분이 한자리 숫자라면, 앞에 0이 하나 주어진다. 시간은 00:00부터 23:59까지이다.
    • 상근이가 전화를 건 시간과 통화 시간이 모두 주어졌을 때, 전화 요금을 구하여 출력한다.

 

문제 풀이 과정

  1. 입력받을 때 replace로 ':'을 공백으로 바꾼 뒤 공백을 기준으로 split 하여 전화 건 시간, 분, 통화시간을 따로 입력받는다.
  2. 전화 건 시간에 통화 시간을 더하고, 시간, 분이 23, 59를 넘어가면 알맞은 형식으로 바꿔서 통화 종료시간, 분을 저장한다.
  3. 전화 요금이 바뀌는 7시나 19시를 걸쳐서 통화를 한다면, 전화 요금을 두 가지 시간에 따라 다르게 계산한다.
  4. 전화 요금이 고정적인 시간에 통화를 한다면, 해당 시간에 맞는 전화 요금으로 계산한다.
  5. 모든 전화 건 수에 대한 요금을 합하여 출력한다.

 

코드 및 설명
charge = 0  # 총 전화 요금
for _ in range(int(input())):
    s = input()
    s = s.replace(':', ' ')
    h, m, time = map(int, s.split())  # 전화 시작 시간
    end_h, end_m = h, 0  # 전화 종료 시간

    # 시간, 분이 단위를 넘어가면
    if time + m >= 60:
        end_m = time + m - 60
        end_h = h + 1
        if end_h > 23:
            end_h = 0
    else:
        end_m = time + m

    # 요금 변환 시간에 전화 중일 때
    if (end_h == 7 or end_h == 19) and m >= end_m and end_m != 0:
        # 7시를 넘기면
        if end_h == 7:
            charge += (time - end_m) * 5 + end_m * 10
        # 19시를 넘기면
        elif end_h == 19:
            charge += (time - end_m) * 10 + end_m * 5
    else:
        if 7 <= h <= 18:
            charge += time * 10
        else:
            charge += time * 5

print(charge)

BaekJoon 백준 3226 전화 요금 문제를 파이썬 python으로 풀어보았다. 난이도는 Bronze 브론즈 1이다. 

728x90
반응형

댓글