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

청수동햄주먹·2023년 3월 3일
0

파이썬코딩테스트

목록 보기
18/35

프로그래머스 명예의 전당

내 코드

def solution(k, score):
    answer = []
    mini = score[0]
    temp = []
    
    for i,x in enumerate(score):
        if i < k :
            temp.append(x)
            if x < mini:
                mini = x
        else :
            if x > mini :
                temp.remove(mini)
                temp.append(x)
                mini = min(temp)
        answer.append(mini)
    return answer

막상 시작하니 금방 끝냈지만 하려고 마음먹고 들여다 보기까지 몇번 실패를 하다가 풀었다.

  1. 두개의 리스트, 최저값을 담아둘 변수 하나가 필요하다.
    a. temp: k개의 점수를 저장한다
    b. 그날 그날의 최저값을 저장하는 리스트
  2. score 인풋 리스트를 for-loop으로 돌 것인데
    a. k-1 번째까지는 temp에 추가 연산 없이 바로바로 값을 저장할 수 있다. 다만 현재의 최저값보다 더 작은 값이 나오면 그 값으로 mini값을 수정
    b. k번째 부터는 temp의 길이가 k를 넘지 않도록 추가 연산이 필요하다. x가 k번째 순위인 최저값보다 높으면 현재의 최저값을 temp.remove하고 x를 temp.append한다. 또 mini 값을 temp의 최저값으로 업데이트 해야함

성능

나쁘지 않은 성능을 보여줘서 다른 코드와 비교는 이번은 생략

테스트 1 〉통과 (0.01ms, 10.3MB)
테스트 2 〉통과 (0.02ms, 10.2MB)
테스트 3 〉통과 (0.01ms, 10.3MB)
테스트 4 〉통과 (0.01ms, 10.3MB)
테스트 5 〉통과 (0.01ms, 10.2MB)
테스트 6 〉통과 (0.01ms, 10.2MB)
테스트 7 〉통과 (0.02ms, 10MB)
테스트 8 〉통과 (0.02ms, 10.1MB)
테스트 9 〉통과 (0.01ms, 10.1MB)
테스트 10 〉통과 (0.01ms, 10MB)
테스트 11 〉통과 (0.02ms, 10.2MB)
테스트 12 〉통과 (0.73ms, 10.2MB)
테스트 13 〉통과 (0.37ms, 10.2MB)
테스트 14 〉통과 (0.31ms, 10MB)
테스트 15 〉통과 (1.13ms, 10.3MB)
테스트 16 〉통과 (0.55ms, 10.1MB)
테스트 17 〉통과 (0.60ms, 10.1MB)
테스트 18 〉통과 (1.15ms, 10.3MB)
테스트 19 〉통과 (0.22ms, 10.1MB)
테스트 20 〉통과 (0.21ms, 10.2MB)
테스트 21 〉통과 (0.16ms, 10.2MB)
테스트 22 〉통과 (0.12ms, 10.1MB)
테스트 23 〉통과 (0.12ms, 10.1MB)
테스트 24 〉통과 (0.13ms, 10.4MB)
테스트 25 〉통과 (0.14ms, 10.2MB)
테스트 26 〉통과 (0.01ms, 10.3MB)
profile
코딩과 사별까지

0개의 댓글