빙응의 공부 블로그
[Programmers]LV.1 명예의 전당 본문


📝풀이
컬렉션을 이용한 처리가 중요한 방식이다.
나는 ArrayList를 이용해 구현했지만
PriorityQueue를 이용하면 쉽게 구현 가능하다.
1. k개의 용량을 다 채워줄 로직이 필요하다.
2. 값을 비교하기 위한 sort기능이 필요하다.
3. 맨 앞에 있는 값을 가져오기 위한 방법이 필요하다
내가 한 코드는 모든 경우의 수에 sort를 하며 remove때 많은 연산이 필요하다.
import java.util.*;
class Solution {
public int[] solution(int k, int[] score) {
ArrayList<Integer> honor = new ArrayList<>();
int[] answer = new int[score.length];
for (int i = 0; i < score.length; i++) {
if (i < k) {
honor.add(score[i]);
} else {
if (honor.get(0) < score[i]) {
honor.remove(0);
honor.add(score[i]);
}
}
Collections.sort(honor);
answer[i] = honor.get(0);
}
return answer;
}
}
그래서 PriorityQueue를 이용한다.
PriorityQueue는 우선순위가 있는 큐이다.
즉 자동으로 sort 기능이 있다.
이 방법을 이용하면 효율적인 코딩이 가능하다.
import java.util.*;
class Solution {
public int[] solution(int k, int[] score) {
PriorityQueue<Integer> honor = new PriorityQueue<>();
int[] answer = new int[score.length];
for (int i = 0; i < score.length; i++) {
if (i < k) {
honor.add(score[i]);
} else {
if (honor.peek() < score[i]) {
honor.poll();
honor.add(score[i]);
}
}
answer[i] = honor.peek(); //큐의 맨앞을 가져옴
}
return answer;
}
}
'Argorithm' 카테고리의 다른 글
| [Programmers]LV.1 과일 장수 (0) | 2023.12.11 |
|---|---|
| [Programmers]LV.1 기사단원의 무기 (0) | 2023.12.10 |
| [Programmers]LV.1 문자열 나누기 (1) | 2023.12.06 |
| [Programmers]LV.1 가장 가까운 같은 글자 (0) | 2023.12.04 |
| [Programmers]Lv.1 크기가 작은 부분 문자열 (0) | 2023.12.02 |