반응형
11650번: 좌표 정렬하기
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net
풀이 >
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Baekjoon11650 {
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 count = Integer.parseInt(br.readLine());
int[][] array = new int[count][2];
for (int i = 0; i < count; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
array[i][0] = Integer.parseInt(st.nextToken());
array[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(array, (o1, o2) -> {
if (o1[0] == o2[0]) return Integer.compare(o1[1], o2[1]);
return Integer.compare(o1[0], o2[0]);
});
for (int[] is : array)
bw.append(String.valueOf(is[0])).append(" ").append(String.valueOf(is[1])).append("\n");
bw.flush();
br.close();
bw.close();
}
}
객체 배열의 값을 정렬할때 Overriding 해야하는 Comparator 의 compare 메소드 사용법
//람다식 표현
Arrays.sort(array, (o1, o2) -> {
if (o1[0] == o2[0]) return Integer.compare(o1[1], o2[1]);
return Integer.compare(o1[0], o2[0]);
});
첫번째 인자와 두번째 인자를 비교하는 부분을 재정의한다.
음수값을 리턴하면 두 객체의 자리를 바꾸고 (내림차순)
0이나 양수가 리턴되면 자리는 바뀌지 않는다!
+Integer.compare(x,y)
x와 y를 비교해 x값이 y값보다 작으면 -1리턴.
같거나, x가 y보다 크다면 0 리턴
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[JAVA]백준 - 1018.체스판 다시 칠하기 (0) | 2020.11.11 |
---|---|
[JAVA]백준 - 1181.단어 정렬(compare 오버라이딩) (0) | 2020.11.10 |
[JAVA]백준 - 1259.팰린드롬수 (0) | 2020.11.08 |
[JAVA]백준 - 11654.아스키 코드 (0) | 2020.11.05 |
[JAVA]백준 - 2338.긴자리 계산 (0) | 2020.11.04 |