본문 바로가기
코딩테스트 준비(kotlin)/기본

[프로그래머스 kotlin] 가장 큰 수

by 1chanhue1 2024. 7. 10.

 

풀이 과정

첫 번째 시도( 실패 )

앞자리만 비교해서 정렬 후 , 배치하면 되겠다 -> 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("")
}