[백준/Python] 2852 NBA 농구
처음에 생각을 잘못 해서 틀려서 두 번째 시도에서 성공했다.
처음에 생각하지 못한 경우는 팀1이 우세하다가 팀2가 우세하고 다시 팀1이 우세하면서 엎치락 뒤치락할 수 있다는 것을 생각 못했다. 예제에 나와있는 한 팀이 우세한 뒤 다른 한 팀이 우세하면 끝난다고 생각해서 여러번의 '이기는 시간'의 누적을 구할 수 없었다
그래서 작성했던 모든 코드를 지우고 다시 코드를 작성하기 시작했는데,
처음에는 시간을 mm:ss 형태로 계산했던 것이 너무 복잡해서 그냥 다 초로 바꾼 뒤에 마지막에 누적 시간을 다시 주어진 형식(mm:ss)으로 바꿔주었다.
고려해야할 사항은
1) 각 팀의 점수(이기고 있는 팀의 시간을 누적)
2) 팀 각각의 누적시간을 구함
이라고 생각했고,
나는 이 문제를 "지금 어떤 팀이 이기고 있는지를 파악해 그 시간을 누적시킨다" 로 간단히 하여 풀었다.
def calTime(time):
m, s = time.split(':')
sstime = int(m)*60 + int(s)
return sstime
def returnTime(teamTime):
mm, ss = str(teamTime // 60), str(teamTime % 60)
if len(mm) < 2 and len(ss) == 2:
res = '0' + str(mm) + ':' + str(ss)
elif len(mm) == 2 and len(ss) < 2:
res = str(mm) + ':0' + str(ss)
elif len(mm) < 2 and len(ss) < 2:
res = '0' + str(mm) + ':0' + str(ss)
elif len(mm) == 2 and len(ss) == 2:
res = str(mm) + ':' + str(ss)
return res
N = int(input())
scoreDic = {}
for i in range(N):
team, time = map(str, input().split())
time = calTime(time)
scoreDic[time] = int(team)
team1 = 0 # 팀1 점수
team2 = 0 # 팀2 점수
team1Time = 0 # 팀1이 이기고 있는 누적 시간
team2Time = 0 # 팀2가 이기고 있는 누적 시간
for i in range(2880):
if i in scoreDic.keys():
if scoreDic[i] == 1: # 팀1이 골을 넣음
team1 += 1
else: # 팀2가 골을 넣음
team2 += 1
if team1 > team2: # 팀1이 이기고 있는 누적 시간
team1Time += 1
elif team1 < team2: # 팀2가 이기고 있는 누적 시간
team2Time += 1
res1,res2 = returnTime(team1Time), returnTime(team2Time)
print(res1+'\n'+res2)
풀이과정
1. 주어진 골 넣은 시간을 모두 '초'단위로 바꿔 { 골을 넣은 시간: 팀 } 형태의 dictionary 로 저장
→ calTime(time) 함수 사용
2. 0초부터 2880초(48:00)까지 for문을 돌리면서
2-1. dictionary에 저장된 숫자가 있으면 해당하는 팀의 점수를 1 올림
2-2. 팀1이 이기고 있거나, 팀2가 이기고 있을 때, 이기고 있는 팀의 누적시간을 계속 1초씩 더함
* 비기고 있을 때는 누적시간을 어떤 팀에게도 더하면 안되므로 else를 쓰지 않음
3. 주어진 누적 시간을 다시 주어진 형식(mm:ss)으로 바꿔 출력
→ returnTime(time) 함수 사용