문제:
동혁이는 NBA 농구 경기를 즐겨 본다. 동혁이는 골이 들어갈 때 마다 골이 들어간 시간과 팀을 적는 이상한 취미를 가지고 있다.
농구 경기는 정확히 48분동안 진행된다. 각 팀이 몇 분동안 이기고 있었는지 출력하는 프로그램을 작성하시오.
입력:
첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다. 둘째 줄부터 N개의 줄에 득점 정보가 주어진다. 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다. 팀 번호는 1 또는 2이다. 득점한 시간은 MM:SS(분:초) 형식이며, 분과 초가 한자리 일 경우 첫째자리가 0이다. 분은 0보다 크거나 같고, 47보다 작거나 같으며, 초는 0보다 크거나 같고, 59보다 작거나 같다. 득점 시간이 겹치는 경우는 없다.
출력:
첫째 줄에 1번 팀이 이기고 있던 시간, 둘째 줄에 2번 팀이 이기고 있던 시간을 출력한다. 시간은 입력과 같은 형식(MM:SS)으로 출력한다.
풀이방법:
1번팀과 2번팀과의 점수를 기록하면서 한 팀이 점수를 앞서 나가는 순간에만 시간 차이를 계산하여 각 팀의 시간에 더해주도록 한다. 시간을 더할 때 계산의 편의성을 위해 초 단위로 모두 변환한다.
중간중간 동점이 되는 경우도 있기 때문에 동점이 되기 전에 시간 차이를 더해준 뒤에 기준이 되는 시간을 갱신하고 각 팀에 점수를 더해주도록 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
N = int(input())
timeline = []
for _ in range(N):
timeline.append(input().split())
timeline = sorted(timeline, key=lambda x: x[1])
timeline.append([-1, '48:00'])
one, two = 0, 0
pivot = ''
one_ans, two_ans = 0, 0
for team, time in timeline:
if one==two:
pass
elif one>two:
min_, sec = map(int,time.split(":"))
min_p, sec_p = map(int, pivot.split(":"))
one_ans += (min_*60+sec)-(min_p*60+sec_p)
else:
min_, sec = map(int,time.split(":"))
min_p, sec_p = map(int, pivot.split(":"))
two_ans += (min_*60+sec)-(min_p*60+sec_p)
pivot = time
if int(team)==1:
one+=1
elif int(team)==2:
two+=1
q, r = divmod(one_ans, 60)
print(str(q).zfill(2)+":"+str(r).zfill(2))
q, r = divmod(two_ans, 60)
print(str(q).zfill(2)+":"+str(r).zfill(2))
|
cs |
문제링크:
https://www.acmicpc.net/problem/2852
'Algorithm > Python' 카테고리의 다른 글
[BOJ]1189. 컴백홈 (0) | 2022.08.04 |
---|---|
[BOJ]12869.뮤탈리스크 (0) | 2022.08.02 |
[BOJ]3474. 교수가 된 현우 (0) | 2022.07.26 |
[BOJ]10709. 기상캐스터 (0) | 2022.07.21 |
[BOJ]2870. 수학숙제 (0) | 2022.07.19 |