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 | 
													Tags
													
											
												
												- 가벼운학습지
 - 코테준비
 - 마이라이트
 - java
 - 가벼운학습지후기
 - 자바스크립트
 - 프로그래머스
 - 삼성
 - 백준
 - 자바
 - 성인학습지
 - 삼성소프트웨어아카데미
 - 코딩
 - 스텍
 - javascript
 - 인프런
 - 코테
 - 알고리즘
 - SWEA
 - array
 - js
 - 코딩테스트
 - 일본어학습지
 - mybatis
 - 카카오
 - 자료구조
 - 정렬
 - stack
 - 일본어공부
 - 일본어독학
 
													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