728x90
반응형
문제 바로가기
문제:
동혁이는 NBA 농구 경기를 즐겨 본다. 동혁이는 골이 들어갈 때 마다 골이 들어간 시간과 팀을 적는 이상한 취미를 가지고 있다. 농구 경기는 정확히 48분동안 진행된다. 각 팀이 몇 분동안 이기고 있었는지 출력하는 프로그램을 작성하시오.
입력:
첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다. 둘째 줄부터 N개의 줄에 득점 정보가 주어진다. 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다. 팀 번호는 1 또는 2이다. 득점한 시간은 MM:SS(분:초) 형식이며, 분과 초가 한자리 일 경우 첫째자리가 0이다. 분은 0보다 크거나 같고, 47보다 작거나 같으며, 초는 0보다 크거나 같고, 59보다 작거나 같다. 득점 시간이 겹치는 경우는 없다.
출력:
첫째 줄에 1번 팀이 이기고 있던 시간, 둘째 줄에 2번 팀이 이기고 있던 시간을 출력한다. 시간은 입력과 같은 형식(MM:SS)으로 출력한다.
풀이:
import heapq
import sys
sys.stdin = open('/Users/song/Desktop/Python/Python/h.txt', 'r')
N = int(input())
team_win = 0
res_A = 0
res_B = 0
for i in range(N):
team, time = input().split(" ")
M, S = map(int, time.split(":"))
if team == '1': # 팀 A가 득점한 경우
if team_win == 0: # 들어오면서 이제 팀 A가 이기고 있음을 나타냄
res_A += 48 * 60 - (60 * M + S) # 현재 득점 시간 이후에도 팀 A가 이기고 있기 때문에 누적 시간에 추가
team_win += 1 # 팀 A가 이기고 있음을 나타냄
if team_win == 0: # 이제 무승부로 될 것이므로 팀 B가 이기고 있던 시간을 처리
if res_B > 0: # 팀 B가 이기고 있던 시간이 있으면
res_B = res_B - (48 * 60 - (60 * M + S)) # 득점 시간 이후에도 팀 B가 이기고 있었기 때문에 누적 시간에서 제거
else: # 팀 B가 득점한 경우
if team_win == 0:
res_B += 48 * 60 - (60 * M + S)
team_win -= 1
if team_win == 0: # 이제 무승부로 될 것이므로 팀 A가 이기고 있던 시간을 처리.
if res_A > 0: # 팀 A가 이기고 있던 시간이 있으면
res_A = res_A - (48 * 60 - (60 * M + S)) # 득점 시간 이후에도 팀 A가 이기고 있었기 때문에 누적 시간에서 제거합
print(str(res_A // 60).zfill(2) + ":" + str(res_A % 60).zfill(2))
print(str(res_B // 60).zfill(2) + ":" + str(res_B % 60).zfill(2))
은근 어려웠다?
만약에 1팀이 이기기 시작하면
경기시간 48분 에서 지금 시작한 시간을 빼준 값을 일단 더해준다.
그러다가 2번이 들어오면서 비기게 되면
48분에서 2번이 들어오시간을 뺀 값을 위에 값에서 빼주면된다.
예를들면
1 ,10 분
2, 20 분
1번은 38분동안 이길 수 있다.
2번이 20분에 들어오면서 48 - 20 = 28
1번 시간 - 2번 = 10분
10분동안 이기고 있었던게 되는거다.
반응형
댓글