IT 공부/코딩테스트

[프로그래머스 level1] 명예의 전당(1) - pyhon3

unnimm 2023. 8. 7. 01:41

문제 해설

k와 score가 주어진다.

k는 명예의 전당에 총 이름이 들어가는 숫자이다.

예를 들어, k가 4이면 명예의 전당에 오를 사람은 4명 뿐이다.

 

score는 한 사람이 노래를 불렀을 때의 점수이다.



그래서 문제는 명예의 전당의 점수보다 현재의 점수가 크다면 가장 낮은 점수를 없애고 현재 점수를 올린다.

그리고 가장 낮은 점수를 출력하면 된다.

 

코드

def solution(k, score):
    list_score = []
    result = []
    for score_each in score:
        if len(list_score) != k:
            list_score.append(score_each)
            result.append(min(list_score))
        else: #list_score에 k개 만큼 요소가 채워진 것
            if score_each >= min(list_score):
                list_score.remove(min(list_score))
                list_score.append(score_each)
                result.append(min(list_score))
            else:
                result.append(min(list_score))
    return result

1. 일단 score의 점수 하나하나에 접근한다.

for score_each in score:

 

2. 그리고 명예에 전당에 오를 점수들을 list_score라고 리스트를 만들어 저장한다.

list_score = []

 

3. 만약에 list_score의 요소의 길이가 k개를 넘어가지 않는다면 score_each가 순서대로 저장될 것이고, k개라면 밑에 문장을 실행시킨다.

if len(list_socre) != k:

else:

 

3-1. 만약에 list_score의 요소의 길이가 k개를 넘어가지 않는다면 score_each가 순서대로 저장되며, 저장될 때마다 result라는 리스트를 만들어서 그 명예전당의 최소값을 넣어준다.

if list_score.append(score_each)

result.append(min(list_score))

 

3-2. list_score의 요소의 길이가 k개라면, 밑 문장을 실행해주는데, 그 밑문장은 이렇다

 

4-1. 만약 score_each의 값이 list_score의 최솟값보다 크거나 같으면 

if score_each >= min(list_score):

4-1-1. 최솟값을 삭제하고 현재 점수를 리스트에 넣어준다.

list_score.remove(min(list_score))

list_score.append(score_each)

4-1-2. 그리고 새로 만들어진 list_score의 최솟값을 result에 넣어준다.

result.append(min(list_score))

 

4-2. 그게 아니라면 score_each의 값이 list_score 최솟값보다 작으면

else:

4-2-2. 기존의 list_score를 유지하고 유지된 list_score의 최솟값을 result에 넣는다.

result.append(min(list_score))