알고리즘(백준)/구현

[알고리즘/구현] 2852번 : NBA 농구 - python

되다 2023. 12. 29. 10:59

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

 

2852번: NBA 농구

첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다. 둘째 줄부터 N개의 줄에 득점 정보가 주어진다. 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다. 팀 번호는 1 또는 2이다. 득

www.acmicpc.net


  • 문제
  • 소요시간 : 30분(실패)


  • 설계하기(접근방법) 

1. 입력받기

총 골을 넣은 횟수를 n으로 입력받는다

그 다음 for문을 통해서 정보들을 입력받는다

팀번호는 팀번호로, 분과 초는 :를 기준으로 입력받는다

 

2. 구현하기

누가 이기고 있는지 체크하는 체커가 필요하다

또한 이전 골의 시간과 현재 골의 시간을 비교해야 하기 때문에

이전 골의 시간 값을 저장할 변수가 필요하다

 

처음 입력 받을 때 까지는 서로 비긴 상태다

먼저 처음 입력받은 후

점수와, 시간을 저장해놓는다

 

그 다음 순회 때

입력받은 시간 - 이전 시간을 하고

현재 이기고 있는 팀을 판별하여

시간을 더해준 후

그 다음 입력받은 팀의 번호에 점수를 더해준다

 

3. 출력하기

 

00:00 형태이므로

형태에 맞게 포맷을 사용하여 출력한다


  • 코드(출력)
n = int(input())

time_std = 0
team_1_win_time = 0
team_2_win_time = 0
team_1_score = 0
team_2_score = 0
winning_team = 0

for i in range(n + 1):
    if i < n:
        team_num, time = input().split()
        team_num = int(team_num)
        time_min, time_sec = int(time[0:2]), int(time[3:5])
        total_sec = 60 * time_min + time_sec
        
        team_win_time = total_sec - time_std
        time_std = total_sec
    elif i == n:
        team_win_time = (48 * 60) - time_std

    if winning_team == 1:
        team_1_win_time += team_win_time
    elif winning_team == 2:
        team_2_win_time += team_win_time
    else:
        pass
        
    if team_num == 1:
        team_1_score += 1
    else:
        team_2_score += 1
    
    if team_1_score > team_2_score:
        winning_team = 1
    elif team_2_score > team_1_score:
        winning_team = 2
    else:
        winning_team = 0
    
    
        

team_1_min, team_1_sec = team_1_win_time // 60 ,team_1_win_time % 60
team_2_min, team_2_sec = team_2_win_time // 60 , team_2_win_time % 60

team1_total = print(f'{team_1_min:02d}:{team_1_sec:02d}') 
team2_total = print(f'{team_2_min:02d}:{team_2_sec:02d}')

  • 얻어갈 부분

1. 구현 순서를 잘못하고 요구 사항을 잘못 파악해서 실패했다

2. 포맷 함수에 대해서 다시 공부하자.