프로그래머스 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
이처럼 처음부터 result
에 min(lists)
를 k
번 넣어주고 그 이후부터 시작하게 짰다. 그런데 자꾸 오류가 나더라....
내 생각에는 k
가 len(score)
보다 작은 경우의 수가 있는 것 같다^^... 조금 당황... 나만 이렇게 풀었나...
아무튼 그래도 빠른 해결...