풀이 과정
첫 번째 시도( 실패 )
앞자리만 비교해서 정렬 후 , 배치하면 되겠다 -> 3과 32, 이런 경우 어떻게 해결 할 것 인가 ? 예외 발생 !
두 번째 시도
숫자 배열을 문자배열로 변환 후 비교해보자 -> 3과 32 비교 했을 경우 32 > 3 이므로 정렬가능
그러나 한가지 반례 발생
반례 : [0,0,0] 일 때, 0으로 나와야 하는데 000으로 결과가 반환 되기 때문에 -> 예외 처리로 해결 (정렬된 결과에서 첫 번째 값이 "0" 이라면 모든 값이 "0" 이라는 의미로 "0" 반환!)
해결 코드
fun solution(numbers: IntArray): String {
// 숫자 배열을 문자열 배열로 변환
val strings = numbers.map { it.toString() }
// 문자열 배열을 정렬 두 문자열을 합쳐서 더 큰 값이 앞에 오도록 합니다.
val sortedStrings = strings.sortedWith(Comparator { a, b ->
val order1 = a + b
val order2 = b + a
order2.compareTo(order1) // 내림차순으로 정렬
})
// 정렬된 결과에서 첫 번째 값이 "0"이라면 모든 값이 "0"이라는 의미이므로 "0"을 반환
if (sortedStrings[0] == "0") {
return "0"
}
// 정렬된 문자열을 합쳐서 결과를 반환
return sortedStrings.joinToString("")
}
'코딩테스트 준비(kotlin) > 기본' 카테고리의 다른 글
[프로그래머스 kotlin] 2개 이하로 다른 비트 (0) | 2024.07.08 |
---|---|
[프로그래머스 kotlin] 할인 행사 (0) | 2024.06.21 |
[프로그래머스 kotlin] 행렬의 곱셈 (0) | 2024.06.20 |
[프로그래머스 kotlin] n^2 배열 자르기 (0) | 2024.06.19 |
[프로그래머스] 연속 부분 수열 합의 개수 (0) | 2024.06.18 |