프로그래머스 Level1 명예의 전당1 (python)

한승현·2022년 12월 27일
0

programmers

목록 보기
4/22
  • https://school.programmers.co.kr/learn/courses/30/lessons/138477
  • 문제
    1. 매일 점수가 부여된다.
    2. 점수는 명예의 전당에 상위 k개까지 저장된다.
    3. 매일 명예의 전당에 저장된 점수 중 제일 낮은 점수들모아 리턴한다.
  • 제한사항
    • 3 ≤ k ≤ 100
    • 7 ≤ score의 길이 ≤ 1,000
      • 0 ≤ score[i] ≤ 2,000
  • 코드
    def solution(k, score):
        answer = [score[0]];
        rank = [score[0]];
        for i in range(1,len(score)):
            if len(rank) < k:
                rank.append(score[i]);
                rank.sort(reverse=True);
            else:
                if score[i] > rank[-1]:
                    rank.pop();
                    rank.append(score[i]);
                    rank.sort(reverse=True);
            answer.append(rank[-1]);
        return answer
  • 풀이
    • 명예의 전당에 k개보다 적게 저장되어 있다면 갱신할 필요없이 저장만 하면 된다.
    • 저장하고 난 뒤에는 최솟값을 구해 비교하기 위해서 항상 sort로 정렬을 해준다.(pop도 하고, 비교할 때 사용해야 하기 때문에 min으로 찾기보다는 sort로 정렬하는 것이 편하다)
    • 만약 코드에 개선을 한다면 priority queue를 사용해 개선을 할 수 있다.
      • 또는 BirnarySearch로 score가 들어갈 위치를 찾아서 넣어도 된다.(어차피 근데 중간에 넣기 위한 시간복잡도까지 생각하면 그냥 sort하는게 더 낮다고 생각한다)
profile
사람을 만족시켜줄 수 있는 개발자

0개의 댓글