티스토리 뷰
[프로그래머스 - 정렬] 가장 큰 수 - 문제보기
시간은 오래 걸렸지만 배울게 많은 문제였다.
Comparable / Comparator
문제 풀기 전, 알고리즘 공부를 하면서 Java의 Arrays.sort()
에 어떤 알고리즘을 쓰는지 찾아 봤었다. 정렬할 배열에 따라 두가지 경우로 나뉘는데,
- 기본데이터 타입 배열 정렬 시 - Double Pivot Quick Sort
- Collection 배열 정렬 시 - Tim Sort(Merge Sort + Insertion Sort)
이때, 두 번째 경우인 Colleciton을 정렬할 때는 원하는 정렬기준을 설정 할 수 있다.
- Comparable : 객체 내 특정 요소를 기준으로 일반적인 정렬(오름차순, 내림차순)을 할 때
compareTo()
를 오버라이딩하여 사용 - Comparator : 일반적이지 않은 특정한 조건으로 정렬할 때
compare()
을 오버라이딩하여 사용
이걸 미리 공부하고 문제를 풀었음에도 Comparator를 적용할 생각을 하지 못해 시간을 오래 쓰게 됐다.
생각할 점
이 문제를 풀면서 생각해 봐야 했던 사항들은 다음과 같다.
처음에는 단순히 주어진 int배열을 String배열로 변환하고 정렬한 뒤 역순으로 엮어 리턴하였다. 하지만 테스트케이스에 주어진 '30'과 '3'의 순서가 뒤바껴 있었다. 330이 303보다 큰 수이지만 303이 리턴되었다. 이런 이유로 하나의 원소만 보고 정렬해서는 안된다.
compare()
을 오버라이딩하여 두 원소를 서로 결합하였을 때 어떤 경우가 우선시 되는지에 대한 정렬 조건을 설정해 주어야 한다.테스트 케이스에 [0, 0, 0]을 추가해보자.
'Algorithm' 카테고리의 다른 글
[Programmers - 이분검색] 예산 (0) | 2020.03.04 |
---|---|
이분탐색(Binary Search) (0) | 2020.02.20 |
댓글