백준 - 좌표정렬하기2[java]

문제 출처: https://www.acmicpc.net/problem/11651

문제 설명

2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

입력 예시

5
0 4
1 2
1 -1
2 2
3 3

출력 예시

1 -1
1 2
2 2
3 3
0 4

문제 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int total = Integer.parseInt(br.readLine());
        ArrayList<Integer []> xy = new ArrayList<>();

        for(int i = 0; i < total; i++) {
            Integer [] temp = new Integer[2];
            StringTokenizer st = new StringTokenizer(br.readLine());
            temp[0] = Integer.parseInt(st.nextToken());
            temp[1] = Integer.parseInt(st.nextToken());
            xy.add(temp);
        }
        xy.sort((o1, o2) -> {
            if(o1[1] > o2[1]) {
                return 1;
            } else if(o1[1].equals(o2[1])) {
                if(o1[0] < o2[0])
                    return -1;
                return 1;
            } else
                return -1;
        });
        StringBuilder sb = new StringBuilder();
        for(Integer [] i : xy)
            sb.append(i[0]).append(" ").append(i[1]).append("\n");
        System.out.println(sb);
    }
}

ArrayList에 sort를 재정의 해서 풀었다.

다른 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
		int howmany=Integer.parseInt(br.readLine());
		int[][] arr=new int [howmany][2];
		StringBuilder sb=new StringBuilder();
		for(int i=0;i<howmany;i++) {
			StringTokenizer st=new StringTokenizer(br.readLine()," ",false);
			int x=Integer.parseInt(st.nextToken());
			int y=Integer.parseInt(st.nextToken());	
			arr[i][0]=y;
			arr[i][1]=x;
		}
		Arrays.sort(arr,(prev,next)->{
			if(prev[0]==next[0]) {
				return (prev[1]-next[1]);
			}else{
				return prev[0]-next[0];
			}
		});
		for(int i=0;i<arr.length;i++) {
			sb.append(arr[i][1]).append(' ').append(arr[i][0]).append('\n');
		}
		System.out.println(sb);
	}
	
}

Array를 sort로 한게 내꺼보다 조금 더 빨라서 가져왔다. 이렇게도 할 수 있는줄은 몰랏는데 참고해야겠다.

좋은 웹페이지 즐겨찾기