백준 11651번 Arrays.sort(arr, comp) 구현을 이용한

byeol·2023년 2월 10일
0

Arrays.sort()의 경우 안에 정렬 방식을 넣을 수 있도록 정의되어져 있다.

따라서 Comparator 인터페이스의 public int compare(T o1,T o2) 메소드를 이용해서 Array의 정렬방식을 바꿔보고자 한다.

이 문제는 2차원 배열로 푸는 문제가 아니라 객체를 하나 만들고 그 객체에 x,y값을 넣는 방식으로 구현해보았다.

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


class Main{

    public static void main(String[] args) throws IOException{

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = null;

        int T = Integer.parseInt(br.readLine());
        xyDot[] arr = new xyDot[T];

        for(int i=0;i<T;i++){
            st = new StringTokenizer(br.readLine()," ");
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            arr[i] = new xyDot(x,y);
        }


        Comparator<xyDot> comp = new Comparator<xyDot>(){ 
            public int compare(xyDot x1, xyDot x2){
                if(x1.y == x2.y) return x1.x -x2.x;
                else return  x1.y-x2.y;
            }
        };

        Arrays.sort(arr,comp);

        for(xyDot index : arr){
            bw.write(index.x+" ");
            bw.write(index.y+"\n");

        }


        bw.flush();
        bw.close();
        br.close();



    }

    static class xyDot{

        int x;
        int y;

        public xyDot(int x, int y){
            this.x =x;
            this.y =y;

        }
    }

}

추가적으로

compare() 메서드에서 x1-x2 면 오름차순이고 x2-x1이면 내림차순일까에 대한 궁금증이 있을 수 있다.

return 값이 양수이면 자리바꿈이 일어나기 때문이다.
원래 x1 x2의 자리라고 생각하면
x1-x2의 결과가 양수이면 자리바꿈이 일어나 x2 x1이 된다. 즉 큰 수인 x1이 뒤로 이동했다.-> 오름차순

x2-x1의 결과가 양수라면 자리바꿈이 일어나서 x2 x1이 된다. 즉 큰 수인 x2가 앞으로 이동했다. -> 내림차순

profile
꾸준하게 Ready, Set, Go!

0개의 댓글

관련 채용 정보