본문 바로가기

알고리즘

프로그래머스) 명예의 전당(1) - python

https://school.programmers.co.kr/learn/courses/30/lessons/138477

 

문제가 좀 긴데, 요약하자면 

len(score)의 수 만큼 가수가 존재하고, 각 가수는 해당되는데 index+1 날짜에 공연을 하게되어 관객들로부터 점수를 얻게된다.

그 점수는 명예의 전당의 최소 수와 비교되어 만일 해당 날짜에 공연한 가수의 점수가 더 크다면, 당일날 공연한 가수의 점수는 명예의 전당에 오르게 된다.

 

즉, k = 2, score=[1,2,3,4]라고 했을 때, score의 index로 말하자면

0번째 날 --> 명예의 전당에 아무도 등록되지 않았으므로 명예의 전당에 1이 올라간다

1번째 날 --> 아직 명예의 전당에 k수 만큼 등록된 점수가 없으므로 2가 등록된다

2번째 날 --> 명예의 전당은 풀방인 상태. index 2의 가수가 3점을 얻었고 전당에 등록된 최소 점수가 1 이므로, 1은 명예의 전당에서 제외되고 3이 그 자리를 차지하게 된다.

.....

이런 식으로 0번째 날부터 len(score)의 날까지 명예의 전당에 등록된 점수들 중 최소 점수를 list형태로 return하는 것이 이번 문제다.

 

def solution(k, score):
    answer = []
    
    arr = []
    
    for i in range(len(score)):
        if k > 0:
            k-=1
            arr.append(score[i])
        else:
            if min(arr) < score[i]:
                arr.pop(arr.index(min(arr)))
                arr.append(score[i])
        answer.append(min(arr))
    return answer

 

명예의 전당에 자리(k)만큼은 자동으로 명예의 전당에 오르므로 index와 k를 비교하였고

k날이 지난 경우엔 전당(arr)에 등록된 최소 점수와 해당 인덱스(score[i])를 비교했다.

k번째 날, 그리고 명예의 전당에 등록된 최소점수와 score[i]의 비교가 끝난 이후 answer에 최소 점수를 append 시켜주며 answer르 채워나가게 된다.

 

아직 레벨 1은 무리없이 풀 수 있지만, 아주 쉬운문제의 2레벨을 제외한 그 이상의 난이도는 내겐 아직 힘들다...

파이팅하자.