본문 바로가기

JAVA/백준

백준 11651번: 좌표 정렬하기 2

728x90
반응형

2차원 평면 위에 점 N개가 주어진다.

이 N개의 점을 우선 y를 기준으로, y가 같다면 x를 기준으로 오름차순으로 정렬하면 된다.

 

직전에 풀었던 문제와 x와 y만 바뀐 문제이다.

덕분에 직전에 코드를 조금 바꾸는 것으로 문제르 풀 수 있다.

문제를 푸는 핵심인데, x를 arr[i][0]에 받고, y를 arr[i][1]에 받아주었다.

(e1[1] == e2[1]), 즉 y값이 같을 때 (e1[0] - e2[0]) x값에 대해 오름차순으로 정렬한다.

그게 아니라면 e1[1] - e2[1]. y에 대해 오름차순으로 정렬한다.

 

아래는 이번 문제의 전체 코드이다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
import java.util.Arrays;
import java.util.Comparator;

public class Main {

	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 n = Integer.parseInt(br.readLine());
		int[][] arr = new int[n][2];
		
		for (int i = 0; i < n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			arr[i][0] = Integer.parseInt(st.nextToken());
			arr[i][1] = Integer.parseInt(st.nextToken());
		}
		
		Arrays.sort(arr, (e1, e2) -> {
			if (e1[1] == e2[1]) return e1[0] - e2[0];
			else return e1[1] - e2[1];
		});
		
		for (int i = 0; i < n; i++) {
			bw.write(arr[i][0] + " " + arr[i][1] + "\n");
		}
        bw.flush();
        bw.close();
	}
}

 

반응형

'JAVA > 백준' 카테고리의 다른 글

백준 1920번: 수 찾기  (1) 2024.04.06
백준 11866번: 요세푸스 문제 0  (0) 2024.04.05
백준 11650번: 좌표 정렬하기  (0) 2024.04.03
백준 10814번: 나이순 정렬  (0) 2024.04.02
백준 7568번: 덩치  (0) 2024.04.01