์ด ๋ฌธ์ ๋, ๋จ์ํ 1์ฐจ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ์๋,
x์ขํ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ y์ขํ๋ ๋น๊ตํด์ผ ํ๊ธฐ ๋๋ฌธ์, sort ํจ์์ ์ ๋ ฌ ์กฐ๊ฑด์ ๋ณ๊ฒฝ์์ผ์ฃผ์ด์ผ ํ๋ค.
๋ง์นจ ์ต๊ทผ์, ํ ๋ฐฑ์๋ ์ค์ฟจ ๋๊ธฐ๋ถ ๋๋ถ์ Comparator ์ ๋ํ ์ดํด๋ฅผ ํ ์ํ๋ผ์ ์์ํ๊ฒ ํด๊ฒฐํ ์ ์์๋ค.
๋จผ์ , Arrays.sort(int [][] array) ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก sort ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์
๋ค์ Comparator ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ compare ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ ์ ํํ ์ ๋ ฌ ๊ธฐ์ค์ ์ ๊ณตํด์ฃผ์ด์ผ ๋ฉ์๋๊ฐ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ฐธ๊ณ ๋ก ์ขํ๋ฅผ ๊ธฐ๋กํ ๋ฐฐ์ด์ ์์ฑํ ๋ primitive ํ์ ์ผ๋ก ๋ง๋ค๋ฉด ์๋๋ค.
compare ๋ฉ์๋๊ฐ ๋งค๊ฐ๋ณ์๋ก์ object๋ฅผ ์ทจ๊ธํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ int [][] array ๊ฐ ์๋ Integer [][] array ๋ก ์์ฑํด ์ฃผ์ด์ผ ํ๋ค.
๋ง์ฝ ์ฒซ๋ฒ์งธ ์ธ์๋ก, -1 1 ์ขํ๊ฐ ๋ค์ด์๋ค๊ณ ์๊ฐํ์ ๋,
array[0][0] = -1
array[0][1] = 1 ๋ก ๊ธฐ๋กํ ๊ฒ์ด๊ณ
๋๋ฒ์งธ ์ธ์๋ก 2,2 ์ขํ๊ฐ ๋ค์ด์์ ๋,
array[1][0] = 2
array[1][1] = 2 ๊ฐ ๊ธฐ๋ก๋ ๊ฒ์ด๋ค.
์ฆ array[i][0] ์ i ๋ฒ์งธ๋ก ์ ๋ ฅ๋ ์ขํ์ x์ขํ์ด๊ณ
array[i][1] ์ i ๋ฒ์งธ๋ก ์ ๋ ฅ๋ ์ขํ์ y์ขํ๊ฐ ๋ ๊ฒ์ด๋ค.
class CustomComparator implements Comparator<Integer[]> {
@Override
public int compare(Integer[] a1, Integer[] a2) {
if (a1[0].equals(a2[0])) {
return a1[1] - a2[1];
}
return a1[0] - a2[0];
}
}
์ฌ๊ธฐ์ ์ค์ํ ๋ถ๋ถ์, ์ง๋ค๋ฆญ์ ์ฌ์ฉํด์ Integer[] ๋ง ๋ค์ด์ฌ ์ ์๊ฒ ํด๋์๋ค๋ ๊ฒ์ด๋ค.
compare ๋ฉ์๋์์ ๋ฐ๋ ๋งค๊ฐ๋ณ์, ์ฆ ๋น๊ต ๋์๋ Integer[] ๋ก ์ ๋ ฅ๋ฐ์ ์ ์๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ a1[0] , ์ฆ ์ด๋ค ์ขํ์ x์ขํ์ a2[0] , ๋ค๋ฅธ ์ขํ์ x์ขํ๊ฐ ๊ฐ๋ค๋ฉด,
a1[1] - a2[1] , ์ฆ ๋ ์ขํ์ y์ขํ ๊ฐ์ ์ฐจ์ด๊ฐ ๋ฐํ๋๊ณ ,
์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด๋ฏ๋ก a1์ y์ขํ๊ฐ ๋ ํฌ๋ค๋ฉด, ์์๊ฐ์ด ๋ฐํ๋์ด ๋ ๊ฐ์ฒด์ ์์น๋ฅผ ๋ฐ๊ฟ ๊ฒ์ด๋ค.
์กฐ๊ฑด๋ฌธ์ ๋ง์กฑํ์ง ๋ชปํ๋ฉด
a1[0] - a2[0] ์ด ๋ฐํ๋์ด, ์ด ๊ฒฝ์ฐ ์ญ์ a1์ x์ขํ๊ฐ ๋ ํฌ๋ค๋ฉด ์์๊ฐ์ด ๋ฐํ๋์ด ๋ ์์น๋ฅผ ๋ฐ๊ฟ ๊ฒ์ด๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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));
StringBuilder sb = new StringBuilder();
int N = Integer.valueOf(br.readLine());
Integer[][] array = new Integer[N][2];
for (int i = 0; i < N; i++) {
String[] input = br.readLine().split(" ");
array[i][0] = Integer.valueOf(input[0]);
array[i][1] = Integer.valueOf(input[1]);
}
//array[i][0] ์ i ๋ฒ์งธ๋ก ์
๋ ฅ๋ ์ขํ์ x์ขํ์ด๊ณ
//array[i][1] ์ i ๋ฒ์งธ๋ก ์
๋ ฅ๋ ์ขํ์ y์ขํ๊ฐ ๋ ๊ฒ์ด๋ค.
// System.out.println(Arrays.deepToString(array));
Arrays.sort(array, new CustomComparator());
//CustomComparator ๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์๋ค.
// System.out.println(Arrays.deepToString(array));
for (int i = 0; i < N; i++) {
sb.append(array[i][0]).append(" ").append(array[i][1]).append("\n");
}
System.out.println(sb);
}
}
class CustomComparator implements Comparator<Integer[]> {
@Override
public int compare(Integer[] a1, Integer[] a2) {
if (a1[0].equals(a2[0])) {
return a1[1] - a2[1];
}
return a1[0] - a2[0];
}
}
๋ค๋ฅธ ๋ถ๋ค์ ํ์ด๋ฅผ ๋ดค๋๋ฐ, ๋๋ค์์ ์ด์ฉํด์ ํด๊ฒฐํ ์ฌ๋๋ค์ด ๋๋ถ๋ถ์ด์๋ค.
์์ง ๋๋ค์์ ์ต์์น ๋ชปํด์, ์๊ฐ์ ๋ชปํ๋๋ฐ, ๋ค์ ๋ฌธ์ ๋ถํฐ๋ ๋๋ค์๋ ์๊ฐํด๋ด์ผ๊ฒ ๋ค.