알고리즘

게임 라운드별로 골 넣은 시간과 해당 팀이 주어지고, 각 팀이 몇 분동안 이기고 있는지 출력하는 문제다.

게임 진행 상황에 따라서 각 팀이 이기고 있는 시간(출력물)이 바뀌기 때문에 이를 구현해야 한다.

 

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))
sebinChu