카테고리 없음

[백준/Python] 2852번 : NBA 농구

deveronica 2024. 8. 19. 17:50

 

https://www.acmicpc.net/problem/2852

문제풀이

전체적인 솔루션은 점수가 나는 순간, 이전에 점수 난 시점과의 시간 차이를 계산하며, 그 동안 점수가 높았던 팀에 저장하는 식으로 진행된다. 점수가 같은 경우, 시간 차이는 필요 없으므로 계산하지 않음으로써, 연산 최적화를 수행하였다. 추가적으로 신경 쓴 포인트는 다음과 같다.

  1. 마지막 시간인 48분이 입력으로 들어오지 않으므로, 하드 코딩 해주어야 한다.
    • Iteration을 N+1로 설정해주어, 마지막 Iteration에서 input() 대신 직접 "? 48:00"을 대입한다.
    • Winner를 의미하는 ?는 다음 Iteration에서 활용하는데, 마지막 Iteration이라 활용하지 않는다. 그래서 입력 포맷을 맞춰주기 위해 아무 값이나 넣어주면 된다. 
  2. 뺄셈을 통해, 시간 차이를 구할 때, 초부터 구해준다. 자리내림을 고려한 것이다. 현재의 초가 과거의 초보다 작을 경우, 자리내림이 발생한다.
    1. 자리 내림이 발생했을 경우, 초에 60을 더해준다.
    2. 자리 내림이 발생했을 경우, 분에 1을 빼준다.
  3. 그 동안의 우승자가 중요하므로, 시간을 더해준 뒤 마지막에 현재의 우승자를 반영해준다.
  4. 더해진 시간 차이는 덧셈만 이뤄지므로 모두 더해준 뒤, 마지막에 넘어가는 초를 분으로 변환해주었다.

문제코드

N = int(input())

team1_score, team2_score = 0, 0
team1_minutes, team1_seconds = 0, 0
team2_minutes, team2_seconds = 0, 0
prev_minutes, prev_seconds = 0, 0

for idx in range(N + 1):
    if idx != N:
        winner, time = input().split()
    elif idx == N:
        winner, time = "1 48:00".split()
        
    current_minutes, current_seconds = map(int, time.split(":"))

    if team1_score != team2_score:
        delta_seconds = (current_seconds - prev_seconds) if current_seconds >= prev_seconds else (current_seconds - prev_seconds) + 60
        delta_minutes = (current_minutes - prev_minutes) if current_seconds >= prev_seconds else (current_minutes - prev_minutes) - 1

        if team1_score > team2_score:
            team1_minutes += delta_minutes
            team1_seconds += delta_seconds
        elif team1_score < team2_score:
            team2_minutes += delta_minutes
            team2_seconds += delta_seconds

    prev_seconds = current_seconds
    prev_minutes = current_minutes
    
    if winner == "1":
        team1_score += 1
    elif winner == "2":
        team2_score += 1    

def solution(minutes, seconds):
    total_minutes = minutes + seconds // 60
    remaining_seconds = seconds % 60
    print(f"{total_minutes:02}:{remaining_seconds:02}")

solution(team1_minutes, team1_seconds)
solution(team2_minutes, team2_seconds)