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 |