11650번: 좌표 정렬하기
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net
풀이 과정
- 2차원 배열을 정렬하기 위해서 Comparator를 Override하여 정렬 기준을 제시하는 방법으로 진행
- 첫 번째 기준이 같다면 두번째 기준으로 오름차순 정렬
- 첫 번째 기준이 같지 않다면 첫 번째 기준으로 오름차순 정렬
import java.util.Scanner;
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int xy[][] = new int[num][2];
for(int i=0; i<xy.length; i++)
{
for(int j=0; j<xy[i].length;j++)
{
xy[i][j] = sc.nextInt();
}
}
Arrays.sort(xy, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[0] == o2[0])
//두 번째 기준으로 오름차순
return o1[1] -o2[1];
else
//첫 번째 기준으로 오름차순
return o1[0]-o2[0];
}
});
for(int i=0; i<xy.length; i++)
{
for(int j=0; j<xy[i].length; j++)
{
System.out.print(xy[i][j]+" ");
}
System.out.println();
}
}
}
- 그러나 시간초과가 뜸...
- BufferedReader, BufferedWriter 사용해서 다시 품
StringTokenizer 클래스
- 특정 문자열을 구분자를 통해 잘라서 관리할 수 있는 클래스
- 토큰(Token) = 구분자를 통해 잘려진 문자
int countToklens()
- 남아 있는 토큰의 개수를 반환
boolean hasMoreElements()
- 현재 위치 뒤에 사용할 수 있는 토큰이 남아 있는 경우 true, 그렇지 않으면 false를 반환
Object nextElement()
- 다음 토큰을 Object 타입으로 변환
String nextToken()
- 다음 토큰을 String 타입으로 변환
정답
참고 블로그
[백준] 11650번 : 좌표 정렬하기- JAVA[자바] - 정렬 - 티스토리 (tistory.com)
[백준] 11650번 : 좌표 정렬하기- JAVA[자바] - 정렬 - 티스토리
오늘의 토픽 : Sort && Comparator , Comparable https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주
beingdesigner.tistory.com
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
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));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
int xy[][] = new int[num][2];
for(int i=0; i<num; i++)
{
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
xy[i][0] = x;
xy[i][1] = y;
}
Arrays.sort(xy, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[0] == o2[0])
//두 번째 기준으로 오름차순
return o1[1] -o2[1];
else
//첫 번째 기준으로 오름차순
return o1[0]-o2[0];
}
});
for(int[] i : xy) {
bw.write(i[0]+" "+i[1]);
bw.write("\n");
}
bw.flush();
bw.close();
}
}
'Java > 백준' 카테고리의 다른 글
[JAVA] 백준 10814 나이순 정렬 (0) | 2024.02.07 |
---|---|
[JAVA] 백준 1181 단어 정렬 (1) | 2024.02.07 |
[JAVA] 백준 1427 소트인사이드 (0) | 2024.02.07 |
[JAVA] 백준 10898 수 정렬하기 3 (0) | 2024.02.06 |
[JAVA] 백준 2751 수 정렬하기 2 (1) | 2024.02.06 |