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

김멉덥·2023년 7월 22일
0

알고리즘 공부

목록 보기
61/171
post-thumbnail

문제

프로그래머스 연습문제


코드 구현

def solution(k, score):
    answer = []

    mj = []  # 명예의 전당

    for i in range(len(score)):
        if (i + 1 <= k):            # k일 전이라면 계속 명예의 전당에 들어가게 되므로 우선 계속 넣는다
            mj.append(score[i])
            mj.sort()
            answer.append(mj[0])
        else:   # k일 이후
            if (mj[0] < score[i]):  # 명예의 전당에 들어갈만큼의 점수가 나온다면 -> 가장 최하점을 밀어내고 현재 점수가 들어간 뒤, 그 중 최하점 발표
                mj.pop(0)
                mj.append(score[i])
                mj.sort()
                answer.append(mj[0])
            else:
                answer.append(mj[0])

    return answer

풀이

  • k일까지는 우선 계속 명예의 전당에 추가하면서 최저점을 정답 배열에 넣어준다.
  • k일 이후부터는 명예의 전당에 들어갈만큼의 점수가 나타난다면, 가장 최하점을 밀어내고 해당 점수가 들어간 뒤, 그 상태에서의 최저점을 정답 배열에 넣어준다.
  • 명예의 전당 배열 mj를 계속 정렬해주면, 해당 배열의 0번째 인덱스인 요소는 항상 k번째 순위일 것이다.
    (mj에는 k개의 요소가 들어가는데, 정렬하고 나면 가장 최저점이 0번째 인덱스에 오기 때문)
  • 따라서 명예의 전당 배열인 mj의 0번째 요소와 계속 비교해주며 정답을 채운다.
  • 굳이 정렬을 계속 해줄 필요 없이 min()을 써서 구해도 좋을 것 같다.

profile
데굴데굴 뚝딱뚝딱 개발기록

0개의 댓글