[BOJ: 2852] - Python / 파이썬 - NBA 농구

o_jooon_·2024년 3월 14일
0

BOJ

목록 보기
44/44
post-thumbnail

서론

구현 문제입니다.
총 시간 48분에 맞추어 배열 생성 후 해결하였습니다.

난이도

실버 3


문제

조건

시간 제한메모리 제한
1 초128 MB

동혁이는 NBA 농구 경기를 즐겨 본다. 동혁이는 골이 들어갈 때 마다 골이 들어간 시간과 팀을 적는 이상한 취미를 가지고 있다.

농구 경기는 정확히 48분동안 진행된다. 각 팀이 몇 분동안 이기고 있었는지 출력하는 프로그램을 작성하시오.


입력

첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다. 둘째 줄부터 N개의 줄에 득점 정보가 주어진다. 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다. 팀 번호는 1 또는 2이다. 득점한 시간은 MM:SS(분:초) 형식이며, 분과 초가 한자리 일 경우 첫째자리가 0이다. 분은 0보다 크거나 같고, 47보다 작거나 같으며, 초는 0보다 크거나 같고, 59보다 작거나 같다. 득점 시간이 겹치는 경우는 없다.


출력

첫째 줄에 1번 팀이 이기고 있던 시간, 둘째 줄에 2번 팀이 이기고 있던 시간을 출력한다. 시간은 입력과 같은 형식(MM:SS)으로 출력한다.


예시

예제 입력 1

1
1 20:00

예제 출력 1

28:00
00:00

예제 입력 2

3
1 01:10
2 21:10
2 31:30

예제 출력 2

20:00
16:30

예제 입력 3

5
1 01:10
1 02:20
2 45:30
2 46:40
2 47:50

예제 출력 3

45:30
00:10

풀이

총 경기 시간이 48분으로, 초 단위로 보아도 범위가 크지 않아 배열을 통해 해결하였습니다.
알고리즘 자체는 간단하기에 순서대로 설명하면,

  1. 초 단위 득점하는 팀의 점수 계산을 위해 2880만큼의 배열을 생성합니다.
  2. 득점을 입력받으며 득점 한 시간을 초 단위 시간으로 바꾼 후, 해당 시간 인덱스에 득점한 팀 번호 저장합니다.
  3. 모든 경기 시간을 탐색하며 점수가 높은 팀의 총 이긴 시간을 점점 늘려줍니다.
  4. 조건에 맞게 출력합니다.

코드

import sys
input = sys.stdin.readline

n = int(input())
score = [0] * 2880	# 초 단위 정보가 담긴 배열
cnt = [0] * 2		# 각 팀 별 점수 계산을 위한 배열
ans = [0] * 2		# 각 팀 별 이긴 시간을 위한 배열

for _ in range(n):
    team, time = input().rstrip().split()
    score[int(time[:2]) * 60 + int(time[3:])] = team	# 입력 받은 시간을 초로 계산하여 배열에 팀 번호 저장

for i in range(2880):		# 초 단위로 모든 시간 탐색
    if score[i] == '1':		# 현재 시간에 1번 팀이 득점하는 경우
        cnt[0] += 1			# 1번 팀의 점수 증가
    elif score[i] == '2':	# 2번도 같음
        cnt[1] += 1
    
    if cnt[0] > cnt[1]:		# 현재 시간에 1번 팀의 점수가 더 높은 경우
        ans[0] += 1			# 1번 팀의 이긴 시간 증가
    elif cnt[1] > cnt[0]:	# 2번도 같음
        ans[1] += 1

for i in ans:				# 포맷에 맞추어 출력
    print(f"{i // 60:02}:{i % 60:02}")

실행 결과

profile
iOS개발 공부 중입니다.

0개의 댓글