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까지이다.
- 상근이가 전화를 건 시간과 통화 시간이 모두 주어졌을 때, 전화 요금을 구하여 출력한다.
문제 풀이 과정
- 입력받을 때 replace로 ':'을 공백으로 바꾼 뒤 공백을 기준으로 split 하여 전화 건 시간, 분, 통화시간을 따로 입력받는다.
- 전화 건 시간에 통화 시간을 더하고, 시간, 분이 23, 59를 넘어가면 알맞은 형식으로 바꿔서 통화 종료시간, 분을 저장한다.
- 전화 요금이 바뀌는 7시나 19시를 걸쳐서 통화를 한다면, 전화 요금을 두 가지 시간에 따라 다르게 계산한다.
- 전화 요금이 고정적인 시간에 통화를 한다면, 해당 시간에 맞는 전화 요금으로 계산한다.
- 모든 전화 건 수에 대한 요금을 합하여 출력한다.
코드 및 설명
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
반응형
'Algorithm Problem Solving > BaekJoon' 카테고리의 다른 글
[BaekJoon] 백준 18512 점프 점프 (Python / 파이썬) (0) | 2021.09.07 |
---|---|
[BaekJoon] 백준 1145 적어도 대부분의 배수 (Python / 파이썬) (0) | 2021.09.07 |
[BaekJoon] 백준 16360 Go Latin (Python / 파이썬) (0) | 2021.08.28 |
[BaekJoon] 백준 14563 완전수 (Python / 파이썬) (0) | 2021.08.28 |
[BaekJoon] 백준 20001 고무오리 디버깅 (Python / 파이썬) (0) | 2021.08.28 |
댓글