Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 정렬
- 삼성
- js
- 자료구조
- 배열
- javascript
- 인프런
- java
- 코딩테스트
- 자바
- 삼성소프트웨어아카데미
- mybatis
- 자바스크립트
- 중간 평균값 구하기
- spring
- array
- 그리디알고리즘
- 코테
- 알고리즘
- AtoZ0403
- 스텍
- stack
- 백준
- 카카오
- 콜백지옥
- 코테준비
- 프로그래머스
- 코딩
- NestJS
- SWEA
Archives
- Today
- Total
개발에 AtoZ까지
[JAVA][Array] KClosestPointstoOrigin 본문
반응형
1. 문제
We have a list of points on the plane.
Find the K closest points to the origin (0, 0).
(Here, the distance between two points on a plane is the Euclidean distance.)
You may return the answer in any order.
The answer is guaranteed to be unique (except for the order that it is in.)
Example 1:
Input: points = [[1,3],[-2,2]], K = 1
Output: [[-2,2]]
Explanation: The distance between (1, 3) and the origin is sqrt(10). The distance between (-2, 2) and the origin is sqrt(8). Since sqrt(8) < sqrt(10), (-2, 2) is closer to the origin. We only want the closest K = 1 points from the origin, so the answer is just [[-2,2]].
2. 문제해설
input으로 point를 주는데 그 중 0,0에서 K개수 만큼 가까운 지점의 좌표를 구하라
3. 코드포맷
class Interval {
int start;
int end;
Interval() {
this.start = 0;
this.end = 0;
}
Interval(int s, int e) {
this.start = s;
this.end = e;
}
@Override
public String toString() {
return start + ", "+end;
}
}
public class KClosestPointstoOrigin {
public static void main(String[] args) {
List<Interval> list = new ArrayList<Interval>();
Interval in1 = new Interval(1, 3);
Interval in2 = new Interval(-2, 2);
Interval in3 = new Interval(-1, 2);
list.add(in1);
list.add(in2);
list.add(in3);
kClosest(list, 2);
}
}
4. 접근 방법
각각의 좌표를 0~가로좌표, 0~세로좌표의 제곱하고 더한값의 가장 작은 수를 구한다.
5. 코드
public class KClosestPointstoOrigin {
public static void main(String[] args) {
List<Interval> list = new ArrayList<Interval>();
Interval in1 = new Interval(1, 3);
Interval in2 = new Interval(-2, 2);
Interval in3 = new Interval(-1, 2);
list.add(in1);
list.add(in2);
list.add(in3);
kClosest(list, 2);
}
private static void kClosest(List<Interval> list, int i) {
//일반적인 큐가 아니라 우선순위 정렬 큐를 사용함
//큐가 아니라 list에서 바로 정렬하여도 됨
Queue<Interval> q = new PriorityQueue<Interval>(comp);
for(Interval in :list) {
q.add(in);
}
for(int index =0;index<i;index++) {
System.out.println(q.poll());
}
}
static Comparator<Interval> comp = new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
int fir = (int) (Math.pow(o1.start,2)+Math.pow(o1.end, 2));
int sec = (int) (Math.pow(o2.start,2)+Math.pow(o2.end, 2));
return fir-sec;
}
};
}
반응형
'코딩테스트 준비 > 기타문제' 카테고리의 다른 글
[JAVA][Array] Unique Email Address (0) | 2021.02.05 |
---|---|
[JAVA][Array] PlusOne (0) | 2021.02.01 |
[JAVA][Array] LicenseKey Formatting (0) | 2021.01.27 |
[JAVA][Array] Jewels And Stones (0) | 2021.01.27 |
[JAVA][Array] MeetingRoom2 (0) | 2021.01.26 |
[JAVA][Array] MergeInterval (0) | 2021.01.26 |
[JAVA][Array] Daily Temperature (0) | 2021.01.26 |
Comments