Koala - 5기/기초 알고리즘 스터디

[백준|python] 2852번 NBA 농구

jeonyoungseo 2022. 1. 28. 13:14

이 문제에서 주의해야 할 점은 player1이 이기다가.. 다시 비기게 되는 순간에 player1이 이기는 시간이 멈추어져야 하고, player2가 다시 선방(?)하게 될 때 또 player2의 이기는 순간이 시작되어야 한다.

그래서 이 때 관점을 우리가 하나씩 입력받는 순간마다 바뀌도록 했는데, 그 방법은 예를 들어 player 1 -> 1 -> 2 -> 2 -> 2 ->라고 하면 player가 이길 때는 +1로 양수로 한 칸 가고 2가 이길 때는 -1로 간다. 즉, 0이 되는 순간이 비기는 거고 양수는 player1이 이기는 거, 음수는 player2가 이기는 거다. (1, 2, 1, 0, -1 이 됨) 그렇게 하면 비기는 순간/player2가 이기는 순간이 헷갈리지 않게 잘 나타나졌다!!

그리고 이기고 있던 시간은 그냥 어차피 경기가 48분이 기준이고, 나중에 어찌 되었든 이기든/지든/비기고 있든 승패는 결정이 나게 되므로 애초에 시간 계산을 경기가 끝나는 그 시간 기준으로 해서 player1이 이기고 있다가 비기게 되면 (48*60-이기기 시작한 시간) - (49*60-비기기 시작한 시간) 이런 식으로 해서 짰다. 어차피 그게 (비기기 시작한 시간- 이기기 시작한시간)이라서 상관이 없다

 

n=int(input())

one_time=0 #1번팀이 이기는 시간
two_time=0
flag=0
for i in range(n):
    team, time=input().split()
    m,s=map(int, time.split(':'))
    if team=='1':
        if flag==0: #이제 이기려고 함
            one_time+=48*60-(60*m+s)
        flag+=1
        if flag==0:
            if two_time>0:
                two_time=two_time-(48*60-(60*m+s))
    else: 
        if flag==0: #이제 이기려고 함
            two_time+=48*60-(60*m+s)
        flag-=1
        if flag==0: #이걸 넣으면 비겨.
            if one_time>0:
                one_time=one_time-(48*60-(60*m+s))

        
print('{:0>2}:{:0>2}'.format(one_time//60,one_time%60))
print('{:0>2}:{:0>2}'.format(two_time//60,two_time%60))
#끝났을 때 무승부로 끝남