[백준/Python] 2953 - 나는 요리사다

orangesnail·2025년 3월 19일

백준

목록 보기
76/169

https://www.acmicpc.net/problem/2953


초기 코드

cooks = []
for _ in range(5):
    score = list(map(int, input().split()))
    cooks.append(sum(score))

print(cooks.index(max(cooks)) + 1, max(cooks))

각 참가자의 점수 총합을 sum() 함수를 이용해 리스트에 추가한 후,
출력 시 max() 함수를 사용해 최대 점수 값, 최대 점수를 가지는 참가자의 인덱스를 찾아 출력하게끔 구현했다.

그런데 여기서 max()를 두 번 호출하게 되면서 시간복잡도가 O(2N)가 된다.

개선된 코드

시간복잡도를 줄이기 위해 max()를 두 번 호출하지 않도록 바꿔보았다.

winner = 0
max_score = 0

for i in range(5):
    score = sum(map(int, input().split()))
    
    if score > max_score:
        max_score = score
        winner = i + 1

print(winner, max_score)

입력 받을때마다 최댓값을 갱신하는 방식으로 코드를 짜면, 총 리스트를 한번만 돌게 되므로 시간복잡도가 O(N)이 된다!

profile
초보입니다. 피드백 환영합니다 😗

0개의 댓글