728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/138477
생각
// 1. Arraylist 에 추가하고
// 2. 정렬
// 3. k 이하면 가장 첫번째 answer 넣기
// 4. k 이상이면 k번째 answer 넣기
코드
import java.util.ArrayList;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
System.out.println(solution(3, new int [] {10, 100, 20, 150, 1, 100, 200})); // 2
}
public static int[] solution(int k, int[] score) {
int[] answer = new int[score.length];
ArrayList<Integer> arrayList = new ArrayList<>();
for (int i = 0; i < score.length; i++) {
// 1. Arraylist 에 추가하고
arrayList.add(score[i]);
// 2. 정렬
arrayList.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
// 3. k 이하면 가장 첫번째 answer 넣기
// 4. k 이상이면 k번째 answer 넣기
answer[i] = arrayList.size() <= k ? arrayList.get(0) : arrayList.get(arrayList.size()-k);
}
return answer;
}
}
다른 사람 풀이
- 우선순위 큐 자료구조를 활용한 점이 맘에 들었다.
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) {
System.out.println(solution(3, new int [] {10, 100, 20, 150, 1, 100, 200})); // 2
}
public static int[] solution(int k, int[] score) {
int[] answer = new int[score.length];
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
for(int i = 0; i < score.length; i++) {
priorityQueue.add(score[i]);
if (priorityQueue.size() > k) {
priorityQueue.poll();
}
answer[i] = priorityQueue.peek();
}
return answer;
}
}
728x90
반응형