자바/백준

[백준 11651] 좌표 정렬하기 2

슈슈버거 2022. 11. 28. 16:34

문제

https://www.acmicpc.net/problem/11651

 

11651번: 좌표 정렬하기 2

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net


내가 작성한 코드

import java.awt.*;
import java.io.*;
import java.util.*;

public class qor11651 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int num = Integer.parseInt(br.readLine());

        HashMap<Integer, ArrayList<Integer>> xy = new HashMap<>();

        for(int i = 0; i<num; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());

            ArrayList<Integer> xs = new ArrayList<>();

            if(xy.containsKey(y)) {
                xs = xy.get(y);
            }
            xs.add(x);

            xy.put(y, xs);
        }

        Map<Integer, ArrayList<Integer>> sortedxy = new TreeMap<>(xy);
        ArrayList<Integer> ys = new ArrayList<>(sortedxy.keySet());

        for(int i = 0; i<ys.size(); i++){
            ArrayList<Integer> list = new ArrayList<>();
            list = xy.get(ys.get(i));
            list.sort(null);

            for(int j = 0; j<list.size(); j++){
                bw.write(list.get(j)+" "+ys.get(i)+"\n");
            }
        }

        bw.close();
    }
}

왜 시간초과가 뜨나 했더니.... 바보같이 x 좌표 값들을 정렬을 여러 번해주고 있었다

입력받을때마다 정렬을 시키고 있었으니 당연히 시간 초과일 수밖에