알고리즘
게임 라운드별로 골 넣은 시간과 해당 팀이 주어지고, 각 팀이 몇 분동안 이기고 있는지 출력하는 문제다.
게임 진행 상황에 따라서 각 팀이 이기고 있는 시간(출력물)이 바뀌기 때문에 이를 구현해야 한다.
1. 골이 들어갈 때 마다 입력을 해주는 거기 때문에 입력되는 팀 번호의 개수를 통해서 각 팀이 이기고 있는지 지고 있는지 판단한다.
2. 현재 게임 득점 시간이 다음 게임 득점 시간에 영향을 주기 때문에 이전 게임의 득점 시간을 반복문의 마지막에 저장한다.
3. 주어진 48분 동안 득점을 한 시간이 주어지기 때문에, (주어진 시간 - 득점 시간) 연산으로 이기고 있는 시간을 출력한다.
파이썬 시간 출력
시간과 관련된 문제를 풀 때, 보통 초 단위로 시간을 변경해서 푸는데 이렇게하면 알고리즘은 쉽게 짤 수 있지만 출력문에서 어려움을 겪을 때가 있다. 이때 소수점을 조정해서 출력하는 방식인 [ ".2f" % 변수명]을 정수로 조정해서 출력해주면 된다.
시간 표현을 할 때 시 : h / 분 : m / 초 : s 는 다음과 같이 구현한다.
print('%02d:%02d:%02d' % (h, m, s)
이는 정수의 빈자리를 0으로 채워서 출력한다는 뜻이다.
최종코드
n = int(input())
t1, t2 = 0, 0
cnt1, cnt2 = 0,0
total = 48 * 60
for _ in range(n):
team, time = input().split()
time = list(map(int, time.split(':')))
t = time[0] * 60 + time[1]
# 팀 1이 이기고 있는 상황이라면
if cnt1 > cnt2 : t1 += (t - pt)
elif cnt1 < cnt2 : t2 += (t - pt)
if team == '1' : cnt1 += 1
elif team == '2' : cnt2 += 1
# 게임 진행 중 시간 관계(현재 게임 득점 시간이 다음 게임 득점 시간에 영향을 줌)
pt = t
if cnt1 > cnt2 : t1 += (total - t)
elif cnt1 < cnt2 : t2 += (total - t)
print('%02d:%02d' % (t1//60,t1%60))
print('%02d:%02d' % (t2//60,t2%60))
최종코드
'PS > BOJ&Programmers' 카테고리의 다른 글
[백준/6550] 부분 문자열 | 반복문으로 고정된 인덱스 다루기 (0) | 2023.02.21 |
---|---|
[백준/8989] 시계 | 시침, 분침의 각도 (0) | 2023.02.19 |
[백준/6236] 용돈 관리 | 이진 탐색 트리 | 분할 | 파이썬 (0) | 2023.02.14 |
[백준/5430] AC | deque의 reverse() | reverse를 여러 번? (0) | 2023.02.13 |
[백준/1021] 회전하는 큐 | python deque | dequed의 rotate() (0) | 2023.02.12 |