명예의 전당(1)

Polla·2023년 1월 26일
0

programmers

목록 보기
32/58
post-thumbnail

프로그래머스 lv1 명예의 전당(1) 파이썬



💡 문제

이 프로그램에서는 매일 "명예의 전당"의 최하위 점수를 발표합니다. 
예를 들어, k = 3이고, 7일 동안 진행된 가수의 점수가 
[10, 100, 20, 150, 1, 100, 200]이라면, 명예의 전당에서 발표된 점수는 
아래의 그림과 같이 [10, 10, 10, 20, 20, 100, 100]입니다.
명예의 전당 목록의 점수의 개수 k, 1일부터 마지막 날까지 출연한 가수들의 
점수인 score가 주어졌을 때, 매일 발표된 명예의 전당의 최하위 점수를 
return하는 solution 함수를 완성해주세요.


🥳 해결!


def solution(k, score):
    lists = []
    result = []
    for i in score:
        lists.append(i)
        if len(lists) >  k:
            del(min(lists))
        result.append(min(lists))
    return result

제일 흔한 방법일 것 같다.
score을 for문에 넣고, k+1 번째 숫자 부터는 가장 작은 숫자인 min(lists)를 지우는 방식....

이렇게 아니면 `deque` 써서 `sort()` 후에 `leftpop()`  
하는 방법도 괜찮을 것 같은데...🤔🤔

쉬운데 좀 억울한게 처음에 runtime을 줄이고 싶어서

def solution(k, score):
    lists = list(score[:k])
    result = [min(lists)] * k
    for i in score[k:]:
        lists.sort()
        if min(lists) <= i:
            lists[0] = i
            result.append(min(lists))
        else:
            result.append(min(lists))
    return result

이처럼 처음부터 resultmin(lists)k번 넣어주고 그 이후부터 시작하게 짰다. 그런데 자꾸 오류가 나더라....

내 생각에는 klen(score)보다 작은 경우의 수가 있는 것 같다^^... 조금 당황... 나만 이렇게 풀었나...
아무튼 그래도 빠른 해결...


profile
트러블 슈팅 Blog => https://polla.palms.blog/home

0개의 댓글