코딩테스트
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프...
programmers.co.kr
제출한 코드
import java.util.*;
class Solution {
public int[] solution(int k, int[] score) {
int[] answer = new int[score.length];
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int i = 0; i < score.length; i++) {
pq.add(score[i]);
if (pq.size() > k) {
pq.poll();
}
answer[i] = pq.peek();
}
return answer;
}
}
초반 k일까지는 그냥 점수를 추가했다.
k일 이후에는 새로운 점수가 명예의 전당 최하위 점수보다 크면 교체하자.
k일 이후부터는 새로운 점수가 기존 명예의 전당 최하위 점수보다 크면 교체했다.
우선순위 큐를 사용한 이유는 항상 값을 넣을 때 마다 정렬되어 있어야 더 생각하기 편리하기 때문에 k 크기만큼 우선순위 큐에 숫자들을 넣고, k 크기를 넘어서면 가장 작은 값을 제거(poll)했다. 물론, 그 전에 반환해야 할 배열 안에 가장 작은 값을 꺼내서(peek) 우선순위 큐 안에 추가(add)한다.
댓글