문제 : boj20949
원하는 방식으로 정렬하는 방법만 알면 쉽게 풀 수 있는 문제이다. 이 문제의 경우 쿼리로 따지면 ORDER BY [W^2+H^2 값] DESC, IDX ASC 인 셈이다. 이 때 W^2+H^2은 W와 H가 모두 최대 3만이므로 두 합은 최대 18억으로, int형으로 표현 가능한 수치이다. 당연하게도 문제에서 square root가 있다고 루트 씌우고 계산하면 소수점 오차때문에 틀릴 수 있다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
class Monitor implements Comparable<Monitor> {
int idx, ppi;
public Monitor(int idx, int w, int h) {
this.idx = idx;
ppi = w*w+h*h;
}
@Override
public int compareTo(Monitor o) {
if (this.ppi == o.ppi) return this.idx - o.idx;
return o.ppi - this.ppi;
}
}
public class Main {
public void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Monitor[] arr = new Monitor[n];
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
arr[i] = new Monitor(i+1, Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
}
Arrays.sort(arr);
StringBuilder answer = new StringBuilder();
for (int i = 0; i < n; i++) {
answer.append(arr[i].idx).append('\n');
}
System.out.print(answer);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
백준 2331 자바 - 반복수열 (BOJ 2331 JAVA) (0) | 2022.01.09 |
---|---|
백준 9847 자바 - 4SUM (BOJ 9847 JAVA) (0) | 2022.01.08 |
백준 1298 자바 - 노트북의 주인을 찾아서 (BOJ 1298 JAVA) (0) | 2022.01.06 |
백준 2188 자바 - 축사 배정 (BOJ 2188 JAVA) (0) | 2022.01.05 |
백준 1017 자바 - 소수 쌍 (BOJ 1017 JAVA) (0) | 2022.01.04 |
댓글