반응형
🔺 문제
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
🔺 코드
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import java.util.*;
import java.io.*;
class Point implements Comparable<Point> {
int idx, x, y;
public Point(int idx, int x, int y) {
this.idx = idx;
this.x = x;
this.y = y;
}
@Override
public int compareTo(Point p) {
int d1 = Math.abs(this.x) + Math.abs(this.y);
int d2 = Math.abs(p.x) + Math.abs(p.y);
if(d1 != d2) { // 원점에서 가까운 점부터 순서대로 출력
return d1 - d2;
}
return this.idx - p.idx; // 거리가 같은 점이 여러 개면, 번호가 작은 점부터
}
}
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Point[] points = new Point[n];
for(int i = 0 ; i < n ; i++) {
String[] str = br.readLine().split(" ");
int x = Integer.parseInt(str[0]);
int y = Integer.parseInt(str[1]);
points[i] = new Point(i + 1, x, y);
}
Arrays.sort(points);
for(Point p : points) {
System.out.println(p.idx);
}
}
}
|
cs |
🧩 해결 아이디어
• 사용자 정의 정렬
점의 번호를 출력해야 하므로, Point 객체에 점 번호 값(idx)을 저장해 사용한다.
- 두 점의 거리가 다르다면, 원점에서 가까운 순서대로 출력한다.
- 두 점의 거리가 같다면 = 거리가 같은 점이 여러 개라면, 원점과 더 가까운 순(= 번호 오름차순)으로 출력한다.
🔺 다른 풀이들
- N개의 점을 입력받을 때마다 리스트에 (각 점과 원점 사이의 거리, 인덱스)를 저장해 사용할 수도 있다.
💬 느낀 점
이거지 이거지....!!!
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
반응형
'코테 > 코드트리' 카테고리의 다른 글
[코드트리/NOVICE MID] 정렬된 숫자 위치 알아내기 (JAVA) (0) | 2023.10.31 |
---|---|
[코드트리/NOVICE MID] 줄 세우기, 줄 세우기 2 (JAVA) (0) | 2023.10.31 |
[코드트리/NOVICE MID] 키, 몸무게를 기준으로 정렬 (JAVA) (0) | 2023.10.31 |
[코드트리/NOVICE MID] 개인정보 (JAVA) (0) | 2023.10.31 |
[코드트리/NOVICE MID] 총점 비교 (JAVA) (0) | 2023.10.31 |