https://school.programmers.co.kr/learn/courses/30/lessons/138477
๐ ํ์ด 3 : IntStream, ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
ํ์ํ ๋ฒ์๋ง ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ ํ, ์ธ๋ฑ์ค๋ก ์ ๊ทผํ์ฌ ๋ช ์์ ์ ๋น ๋ชฉ๋ก ๋ด์ ์ตํ์ ์ ์๋ฅผ ๊ตฌํ๋ค.
import java.util.*;
import java.util.stream.*;
class Solution {
// ๋ช
์์ ์ ๋น ์ ์ ๊ฐ์ k์ ์ ์๋ฐฐ์ด score์ด ์ฃผ์ด์ง ๋, ๋ช
์์ ์ ๋น์ ์ตํ์ ์ ์ ๋ฐฐ์ด ๋ฐํ
public int[] solution(int k, int[] score) {
Integer[] integerScore = Arrays.stream(score).boxed().toArray(Integer[]::new); // Integer ๋ฐฐ์ด๋ก ๋ณํ(Comparator๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌํ๊ธฐ ์ํจ)
return IntStream.range(0, integerScore.length) // ์ธ๋ฑ์ค ์คํธ๋ฆผ ์์ฑ
.map(i -> {
Arrays.sort(integerScore, 0, i + 1, Collections.reverseOrder()); // i+1์ผ์ฐจ๊น์ง์ ์ ์๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
return integerScore[i < k ? i : k - 1]; // ์ตํ์ ์ ์ ๋ฐํ
})
.toArray();
}
}
๐ ํ์ด 2 : PriorityQueue
์ฌ์ฉ ๋ฉ์๋ : `offer(Integer e)`, `poll()`, `peek()`
- ๊ฐํธํ๊ฒ ์ต์๊ฐ์ ๊ตฌํ ์ ์๋ค.โญ
import java.util.*;
class Solution {
// ๋ช
์์ ์ ๋น ์ ์ ๊ฐ์ k์ ์ ์๋ฐฐ์ด score์ด ์ฃผ์ด์ง ๋, ๋ช
์์ ์ ๋น ์ตํ์ ์ ์ ๋ฐฐ์ด ๋ฐํ
public int[] solution(int k, int[] score) {
Queue<Integer> topQueue = new PriorityQueue<>(); // ๋ช
์์ ์ ๋น ๋ชฉ๋ก(์์ k๊ฐ๊น์ง ์ ์ฅ, ์๋ ์ ๋ ฌ)
int[] minScores = new int[score.length]; // ๋ช
์์ ์ ๋น ์ตํ์ ์ ์ ๋ฐฐ์ด
for (int i = 0; i < score.length; i++) {
topQueue.offer(score[i]); // ์ค๋ ์ ์ ์ถ๊ฐ
if (topQueue.size() > k) topQueue.poll(); // k๊ฐ๊ฐ ๋์ด๊ฐ๋ฉด ์ต์๊ฐ ์ ๊ฑฐ
minScores[i] = topQueue.peek(); // ์ค๋์ ์ต์ข
์ตํ์ ์ ์ ์ ์ฅ
}
return minScores;
}
}
๐ ํ์ด 1 : ArrayList
์ฌ์ฉ ๋ฉ์๋ : `add(Integer e)`, `remove(Object o)`
- `stream().min()` ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ต์๊ฐ์ ๊ตฌํ๋ค.(์์๊ฐ ๊ฐ์ฒด ํ์ ์ธ ๊ฒฝ์ฐ `Comparator` ์ ๋ฌ)
import java.util.*;
class Solution {
// ๋ช
์์ ์ ๋น ์ ์ ๊ฐ์ k์ ์ ์๋ฐฐ์ด score์ด ์ฃผ์ด์ง ๋, ๋ช
์์ ์ ๋น ์ตํ์ ์ ์ ๋ฐฐ์ด ๋ฐํ
public int[] solution(int k, int[] score) {
List<Integer> topList = new ArrayList<>(); // ๋ช
์์ ์ ๋น ๋ชฉ๋ก(์์ k๊ฐ๊น์ง ์ ์ฅ)
int[] minScores = new int[score.length]; // ๋ช
์์ ์ ๋น ์ตํ์ ์ ์ ๋ฐฐ์ด
for (int i = 0; i < score.length; i++) {
topList.add(score[i]); // ์ค๋ ์ ์ ์ถ๊ฐ
if (topList.size() > k) topList.remove(new Integer(topList.stream().min(Integer::compare).get())); // k๊ฐ๊ฐ ๋์ด๊ฐ๋ฉด ์ต์๊ฐ ์ ๊ฑฐ
minScores[i] = topList.stream().min(Integer::compare).get(); // ์ค๋์ ์ต์ข
์ตํ์ ์ ์ ์ ์ฅ
}
return minScores;
}
}