K Closest Points to Origin: Priority Queue

Jay·2022년 6월 21일
0

Grind 120

목록 보기
29/38

First Thoughts

거리를 구하는 공식은 이미 존재한다. 좌표 하나당 대응하는 다른 새로운 거리 배열을 새로 만들어도 되겠다..라는 생각을 했지만 좀 더 효율성과 코드의 길이를 줄이는 방법이 없을까..하다가 comparator?를 직접 define 해주면 priority queue를 사용해도 되겠다는 생각을 했다

My Solution

public int[][] kClosest(int[][] points, int k) {
	int[][] results = new int[k][2];
    PriorityQueue<int[]> distance = new PriorityQueue<int[]>(
    	(a, b) -> (a[0]*a[0]+a[1]*a[1]) - (b[0]*b[0]+b[1]*b[1]))
    for (int[] point: points) distance.add(point);
    for (int i=0; i<results.length; i++) results[i] = distance.poll();
    return results;
}

Catch Point

  1. 루트 안의 값을 최대화하면 어차피 루트는 별 의미가 없다..당연한 말이지만 이거 추가하면 엄청 더러워진다.
  2. PQ의 add 와 poll의 시간 효율성이 sorting하는 것보다 더 좋다

0개의 댓글