좌표 정렬하기2(11651)
좌표를 다른 순서로 정렬하는 문제
문제
2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
전 문제는 x를 먼저 기준으로 잡고, y를 먼저 기준으로 잡아라
2차원 배열 기준으로 첫 번째 배열기준이냐, 두 번쨰 배열기준이냐
입력
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
출력
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
예제 입력
예제 출력
풀이
여기서 확인할 수 있는게
Comparator의 내부에 있는 compare함수에서 비교하는 과정에서
o1와 o2 배열안의 인자가 비교하는 대상이란 것을 알 수 있었다.
저번 문제 을 봐보면 저번 문제에서는 x축을 기준으로 정렬을 하기 떄문에 o1[0] - o2[0]가 되었고 이번에는 반대로 y축을 기준으로 정렬을 하기 떄문에 o1[1] - o2[1]이 된것을 확인할 수 있다.
즉, 비교하는 대상이 있는 위치를 Comparator의 내부의 compare함수에 넣어주는 것이라고 볼 수 있다.
굳이 개발자가 이걸 어떻게 시간을 줄일 수 있을까 해서 직접 구현하는 것 보다 더 좋음
Comparator를 선언 시, Generic type을 설정해주고 그 타입에 해당하는 정렬을 새로 정의하는 것도 가능하다
파라미터를 int로 가정하면 앞의 값에서 뒤의 값을 뺀다고 했을 때 앞의 값이 더 크다면 그 차이는 양수가 나올 것이고, 작다면 음수가될 것임
Comparator는 기본적으로 오름 차순이기 때문에 그 원리를 적용해서 순서를 변경하고자 한다면 양수를 리턴시키고, 순서를 그대로 놔두고 싶다면 음수를 리턴시키면 되는 일이다.
Last updated
Was this helpful?