Algorithm/Programmers
[프로그래머스] 명예의 전당 (java)
developerU
2022. 11. 28. 15:23
문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/138477
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 방법
1. PriorityQueue를 이용해 숫자가 작은 순서대로 정렬
2. pq의 사이즈가 k보다 작다면 pq에 값을 추가하고
3. pq의 사이즈가 k보다 크거나 같다면 score[i]의 값과 pq의 첫번째 값 비교
4. score[i]의 값이 pq의 첫번째 값보다 크다면 pq에서 첫번째 값을 빼고 socre[i]를 넣음
5. answer[i] 는 pq의 첫번째 값(다음에도 사용해야하기 때문에 빼는 것이 아니라 peek()!!)
코드
import java.util.*;
class Solution {
public int[] solution(int k, int[] score) {
int[] answer = new int[score.length];
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
for(int i=0; i<score.length; i++){
if(pq.size() < k){
pq.offer(score[i]);
} else{
if(score[i] > pq.peek()){
pq.poll();
pq.offer(score[i]);
}
}
answer[i] = pq.peek();
}
return answer;
}
}