์ฝ๋
import java.util.Comparator;
import java.util.PriorityQueue;
class Solution {
public int[][] kClosest(int[][] points, int k) {
// Point ํด๋์ค๋ฅผ ์ ์ฅํ๋ ์ฐ์ ์์ ํ๋ก, ์ ๋ ฌ ๊ธฐ์ค์ distance๋ก ํ๋ค.
PriorityQueue<Point> pq = new PriorityQueue<>(Comparator.comparingLong(a -> a.distance));
// ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์ขํ ๋ชฉ๋ก ์ํ
for (int[] point : points) {
// ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
long distance = (long) point[0] * point[0] + (long) point[1] * point[1];
// ์ฐ์ ์์ ํ์ ๊ฑฐ๋ฆฌ์ ์ขํ๋ฅผ Point ํด๋์ค๋ก ๋ด์ ์ฝ์
pq.add(new Point(distance, point));
}
int[][] results = new int[k][];
// k๋ฒ ๋งํผ ๋ฐ๋ณตํ์ฌ ๊ฒฐ๊ณผ ์ถ์ถ
for (int i = 0; i < k; i++) {
results[i] = pq.poll().point;
}
return results;
}
static class Point {
long distance;
int[] point;
// ๊ฑฐ๋ฆฌ์ ์ขํ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ค
public Point(long distance, int[] point) {
this.distance = distance;
this.point = point;
}
}
}
Java
๋ณต์ฌ
์ฃผ์ด์ง ์ ๋ค ์ค์์ ์์ (0, 0)์์ ๊ฐ์ฅ ๊ฐ๊น์ด k๊ฐ์ ์ ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
์ฃผ์ด์ง ์ ๋ค์ ๊ฑฐ๋ฆฌ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ฌ k๊ฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ ๋ฐํํ๋ค. ์ฐ์ ์์ ํ(PriorityQueue)๋ฅผ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ์ ๋ค์ ๊ด๋ฆฌํด์ผํ๋ค.
๋ฌธ์ ํด๊ฒฐ ์์ด๋์ด
์ ์ฝ๋์์๋ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ์ง ์๊ณ , ๋์ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ์ ์ ๊ณฑ์ ๊ณ์ฐํ๋ค.
์ด๋ ์ค์ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๋น๊ตํ ๋ ์ ๊ณฑ๊ทผ์ ๊ณ์ฐํ๋ ๋์ ๋ ๊ฑฐ๋ฆฌ์ ์ ๊ณฑ์ ๋น๊ตํ๋ ๊ฒ์ผ๋ก, ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๊ธฐ ๋๋ฌธ์ ์ข ๋ ํจ์จ์ ์ด๋ค!