본문 바로가기
PS/BOJ

백준 20949 자바 - 효정과 새 모니터 (BOJ 20949 JAVA)

by Nahwasa 2022. 1. 6.

문제 : 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();
    }
}

댓글