코테연습문제

[백준/Python] 2852 NBA 농구

SI-AH 2023. 6. 12. 17:56

 

처음에 생각을 잘못 해서 틀려서 두 번째 시도에서 성공했다.

처음에 생각하지 못한 경우는 팀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) 함수 사용