© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 2852 - NBA 농구

2025-07-15
BOJ
실버 III
python
원본 문제 보기
구현
문자열

문제

BOJ 2852 - NBA 농구

NBA 농구 경기에서 골이 들어간 시각과 팀이 주어진다. 경기 시간은 48분이다. 각 팀이 이기고 있던 총 시간을 구하라.

입력

첫 줄에 골 수 N, 이후 N줄에 팀 번호(1 또는 2)와 골 시각(MM:SS 형식)이 주어진다.

출력

1팀이 이기고 있던 시간과 2팀이 이기고 있던 시간을 MM:SS 형식으로 각각 출력한다.

예제

입력출력
4 1 01:10 2 21:10 2 31:30 1 41:4020:00 10:20

풀이

득점 차이를 추적하면서 각 팀이 리드하고 있던 시간을 누적 계산한다.

  1. flag 변수로 현재 득점 차이를 관리한다 (양수: 1팀 리드, 음수: 2팀 리드)
  2. 1팀 골: flag가 0이면 이 시점부터 경기 끝까지의 시간을 1팀에 추가하고, flag를 증가시킨다. flag가 다시 0이 되면 2팀의 누적 시간에서 남은 시간을 차감한다
  3. 2팀 골: 반대로 처리한다
  4. 경기 종료 후 각 팀의 리드 시간을 MM:SS 형식으로 출력한다

핵심 아이디어: 골이 들어갈 때마다 "경기 종료까지 남은 시간"을 먼저 더해두고, 동점이 되는 순간 초과분을 빼는 방식으로 리드 시간을 계산한다.

코드

n = int(input())
 
one_time = 0
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))

복잡도

  • 시간: O(N) — 골 수만큼 순회
  • 공간: O(1) — 상수 개의 변수만 사용