코딩테스트

각 팀이 이기고 있는 시간 계산하기

temporubato108 2024. 9. 29. 10:31

A,B팀이 축구 경기를 90분간 합니다.

이 경기에서 양 팀 합쳐 개의 득점이 났다고 합니다.

각 득점 시간을 줬을 때 각 팀이 이기고 있는 시간을 출력하는 프로그램을 작성하세요.

 

지시사항

입력

- 첫번째 줄에 전체 득점 횟수 N을 입력합니다.(1<=N<=10)

- 두 번째 줄부터 득점한 팀과 시간을 한 줄씩 N번 입력합니다.

- A팀 득점 시 1, B팀 득점 시 2를 입력합니다.

- 득점한 시간은 MM:SS(분:초) 형식이며, 분과 초가 한 자리일 경우 0M:0S로 입력합니다.

- 득점한 시간은 90분을 초과하지 않으며, 다른 득점시간과 중복되지 않습니다.

출력

- 첫 번째 줄에 A팀이 이기고 있던 시간을 출력합니다.

- 두 번째 줄에 B팀이 이기고 있던 시간을 출력합니다.

- 시간의 출력 형식은 입력 형식과 동일합니다.

- 동점 시간은 계산하지 않습니다.

 

입력예시

3
2 10:00
1 50:00
1 90:00

 

출력예시

00:00
40:00

 


 

총 득점 횟수 N을 입력받아 int형으로 변환한 뒤,

for문을 N회만큼 돌려 한 줄씩 득점 팀과 시간을 입력받는다.

시간을 초 단위로 바꾼 뒤 scores리스트에 튜플로 저장한다.

(list에 튜플을 저장할 수 있다는 사실을 까먹고 있다가 검색해보고 알았다..)

마찬가지로 for문을 활용하여 이기고 있던 시간을 계산한다.

 

a_score = 0
b_score = 0

N = int(input())
scores = []

for _ in range(N):
    team, ms = input().split()
    m, s = map(int, ms.split(':'))
    time_in_seconds = 60 * m + s
    scores.append((team, time_in_seconds))

scores.append(('0', 5400))  # 경기 종료 시간 90:00을 초로 변환하여 추가

a_winning_time = 0
b_winning_time = 0

for i in range(N):
    team, current_time = scores[i]
    team_next, next_time = scores[i + 1]

    if team == '1':
        a_score += 1
    else:
        b_score += 1

    if a_score > b_score:
        a_winning_time += next_time - current_time
    elif b_score > a_score:
        b_winning_time += next_time - current_time

a_winning_minutes = a_winning_time // 60
a_winning_seconds = a_winning_time % 60
b_winning_minutes = b_winning_time // 60
b_winning_seconds = b_winning_time % 60

print(f"{a_winning_minutes:02}:{a_winning_seconds:02}")
print(f"{b_winning_minutes:02}:{b_winning_seconds:02}")

 


 

위의 코드로도 모든 테스트코드를 통과했지만,

코파일럿을 참고하여 코드를 수정하여 가독성과 유지보수성, 코드의 재사용성을 높여보았다.

 

def parse_time(ms):
    m, s = map(int, ms.split(':'))
    return 60 * m + s

def format_time(seconds):
    minutes = seconds // 60
    seconds = seconds % 60
    return f"{minutes:02}:{seconds:02}"

def calculate_winning_times(N, scores):
    a_score = 0
    b_score = 0
    a_winning_time = 0
    b_winning_time = 0

    scores.append(('0', 5400))  # 경기 종료 시간 90:00을 초로 변환하여 추가

    for i in range(N):
        team, current_time = scores[i]
        _, next_time = scores[i + 1]

        if team == '1':
            a_score += 1
        else:
            b_score += 1

        if a_score > b_score:
            a_winning_time += next_time - current_time
        elif b_score > a_score:
            b_winning_time += next_time - current_time

    return format_time(a_winning_time), format_time(b_winning_time)

# 입력 처리
N = int(input())
scores = []

for _ in range(N):
    team, ms = input().split()
    time_in_seconds = parse_time(ms)
    scores.append((team, time_in_seconds))

# 결과 계산 및 출력
a_winning_time, b_winning_time = calculate_winning_times(N, scores)
print(a_winning_time)
print(b_winning_time)

 

코드의 길이는 거의 비슷하지만

각 함수에 따라 기능이 분리되어, 좀 더 구조화된 코드를 표현할 수 있다.

 

 

'코딩테스트' 카테고리의 다른 글

그래프 탐색 문제(경로 탐색)  (1) 2024.09.29
모스부호(피보나치 수열)  (0) 2024.09.29
피보나치수 개수 확인문제  (0) 2024.09.28