티스토리 뷰

[프로그래머스 - 정렬] 가장 큰 수 - 문제보기

시간은 오래 걸렸지만 배울게 많은 문제였다.

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이 리턴되었다. 이런 이유로 하나의 원소만 보고 정렬해서는 안된다.

  1. compare()을 오버라이딩하여 두 원소를 서로 결합하였을 때 어떤 경우가 우선시 되는지에 대한 정렬 조건을 설정해 주어야 한다.

  2. 테스트 케이스에 [0, 0, 0]을 추가해보자.

답안 코드

'Algorithm' 카테고리의 다른 글

[Programmers - 이분검색] 예산  (0) 2020.03.04
이분탐색(Binary Search)  (0) 2020.02.20
댓글