[ Baekjoon ] 11651번 ( SILVER V ) : 좌표 정렬하기 2 (Java)
1. Problem 📃
https://www.acmicpc.net/problem/11651
[ 문제 ]
2차원 평면 위의 점 N개가 주어진다.
좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
2. Input ⌨️
[ 입력 ]
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다.
둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다.
(-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
3. Output 🖨
[ 출력 ]
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
4. Example 📚
[ 입출력 예시 ]
예제 입력 | 예제 출력 |
---|---|
5 0 4 1 2 1 -1 2 2 3 3 | 1 -1 1 2 2 2 3 3 0 4 |
5. Solution 🔑
1.몇 개의 점이 있는지에 대한 변수(N)을 선언하고 입력받는다.
2. 각 좌표를 나타낼 2차원 배열 변수(xy)를 N행 2열 만큼 선언해주고, 좌표들을 담아준다.
3. Arrays.sort(xy)를 이용하여 정렬하여주는데 이때 조건이 있으므로 Comporator를 사용한다. 두 배열을 받아서 만약 y좌표가 같다면(o1[1] == 02[1]) x좌표를 비교(o1[0] - o2[0])하여서 정렬해준다.
그렇지 않으면 y좌표끼리만 비교하여 정렬해준다.
4. 최종 정렬된 xy배열을 출력해준다.
6. Code 💻
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int[][] xy = new int[N][2];
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
xy[i][0] = Integer.parseInt(st.nextToken());
xy[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(xy, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[1] == o2[1]) {
return o1[0] - o2[0];
}
else {
return o1[1] - o2[1];
}
}
});
for(int i=0; i<xy.length; i++) {
for(int j=0; j<2; j++) {
System.out.print(xy[i][j] + " ");
}
System.out.println();
}
}
}
Author And Source
이 문제에 관하여([ Baekjoon ] 11651번 ( SILVER V ) : 좌표 정렬하기 2 (Java)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@tpdlqj0514/Baekjoon-11651번-SILVER-V-좌표-정렬하기-2-Java
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1.몇 개의 점이 있는지에 대한 변수(N)을 선언하고 입력받는다.
2. 각 좌표를 나타낼 2차원 배열 변수(xy)를 N행 2열 만큼 선언해주고, 좌표들을 담아준다.
3. Arrays.sort(xy)를 이용하여 정렬하여주는데 이때 조건이 있으므로 Comporator를 사용한다. 두 배열을 받아서 만약 y좌표가 같다면(o1[1] == 02[1]) x좌표를 비교(o1[0] - o2[0])하여서 정렬해준다.
그렇지 않으면 y좌표끼리만 비교하여 정렬해준다.
4. 최종 정렬된 xy배열을 출력해준다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int[][] xy = new int[N][2];
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
xy[i][0] = Integer.parseInt(st.nextToken());
xy[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(xy, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[1] == o2[1]) {
return o1[0] - o2[0];
}
else {
return o1[1] - o2[1];
}
}
});
for(int i=0; i<xy.length; i++) {
for(int j=0; j<2; j++) {
System.out.print(xy[i][j] + " ");
}
System.out.println();
}
}
}
Author And Source
이 문제에 관하여([ Baekjoon ] 11651번 ( SILVER V ) : 좌표 정렬하기 2 (Java)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tpdlqj0514/Baekjoon-11651번-SILVER-V-좌표-정렬하기-2-Java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)