[Do It! 코딩테스트 자바편(김종관)] 문제 058(백준 1854번)
Comparable, Comparator 와 정렬의 관계
- 인용 사이트
- Java에서의 정렬은 특별한 정의가 되어있지 않는 한 ‘오름차순’을 기준으로 한다.
- 오름차순으로 정렬이 된다는 것은 무엇일까?
- 예로 들어 {1, 3, 2} 배열이 있다고 가정해보자. 이 때, 정렬을 하기 위해 두 원소를 비교 하게 될 것 아닌가? 정렬 메소드에서 두 수를 비교하기 위해 index 0 원소와 index 1 원소를 비교한다고 가정해보자. 그럼 선행 원소인 1과 후행 원소인 3의 경우 대소관계는 어떻게 되는가? 1이 3보다 작다.
- 앞서 선행 원소와 후행 원소를 비교 할 때, 얼마큼 차이가 나는지를 반환한다고 헀다. return o1 - o2; 를 한다면, 1-3 = -2로 ‘음수’가 나올 것이다.
- 이 때, 자바에서는 오름차순을 디폴트 기준으로 삼고 있다고 했다. 이 말은 선행 원소가 후행 원소보다 ‘작다’는 뜻이다. 즉, compare 혹은 compareTo를 사용하여 객체를 비교 할 경우 음수가 나오면 두 원소의 위치를 바꾸지 않는다는 것이다.
- 반대의 경우는 두 원소의 위치를 교환한다.
- 결론: 두 수의 비교 결과에 따른 작동 방식
- 음수일 경우: 두 원소의 위치를 교환 안 함
- 양수일 경우: 두 원소의 위치를 교환 함
느낀점
- 교재 설명과 코드를 이해하는 것은 됐지만, 실제로 이 문제를 풀려고 할 때는 못할 것 같다.
- 전혀 감이 안 와서 교재 설명과 코드를 이해하고 익숙해 지는 데 초점을 맞췄다. 백준 사이트에는 문제를 안 풀었으므로 문제를 제출하지 않았다.