처음부터 차근차근

class2 - 11650번 좌표 정렬하기 (자바) 본문

알고리즘

class2 - 11650번 좌표 정렬하기 (자바)

_soyoung 2024. 5. 23. 15:28
반응형

문제 : https://www.acmicpc.net/problem/11650

 

Arrays.sort함수는 1차원 배열 뿐만아니라 2차원 배열도 정렬 가능하다.

단, Comparator 객체를 써서 커스텀 해줘야한다.

 

문제에서 쓰인 개념

Arrays.sort로 2차원 배열 정렬.

Arrays.sort(dots, new Comparator<int[]>() { // 이차원 배열 정렬
    @Override
    public int compare(int[] one, int[] two) { 
        if (one[0] == two[0]) {  
            return one[1] - two[1]; // y좌표 오름차순
        }
        else {
            return one[0] - two[0]; // x좌표 오름차순
        }
    }
});

Comparator 객체의 제너럴 부분에 배열을 넣어야한다.

예를들어 arr = {{1, 2}, {2, 3}, {4, 5}...}이 있다고 가정하자.

one은 {1, 2} two는 {2, 3}이고,

one[0]은 1, two[0]은 2이다.

 

문제 풀이

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

public class Main
{
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            StringTokenizer st;
            
            int dotNum = Integer.parseInt(br.readLine());
            int[][] dots = new int[dotNum][2];
            
            for (int i = 0; i < dotNum; i++) {
                st = new StringTokenizer(br.readLine());
                
                int x = Integer.parseInt(st.nextToken());
                int y = Integer.parseInt(st.nextToken());
                
                dots[i][0] = x;
                dots[i][1] = y;
            }
            
            Arrays.sort(dots, new Comparator<int[]>() { // 이차원 배열 정렬
                @Override
                public int compare(int[] one, int[] two) {
                    if (one[0] == two[0]) { // x 좌표 비교
                        return one[1] - two[1]; // y좌표 오름차순
                    }
                    else {
                        return one[0] - two[0]; // x좌표 오름차순
                    }
                }
            });
            
            for(int[] dot : dots) {
                bw.write(String.valueOf(dot[0])+" "+String.valueOf(dot[1]) + "\n");
            }
            
            
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println("IOException 발생");
		}
		
	}	
}

Arrays.sort를 쓰니 어렵지 않게 문제를 해결할 수 있었다.

 

반응형
Comments