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

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

by 1chanhue1 2025. 1. 10.

class Solution {
    fun solution(numbers: IntArray): String {
        // 숫자 배열을 문자열로 변환하여 리스트에 저장
        var number = mutableListOf<String>()

        // IntArray의 각 요소를 문자열로 변환하여 리스트에 추가
        for (i in 0 until numbers.size) {
            number.add(numbers[i].toString())
        }

        // 커스텀 정렬: 두 숫자를 이어 붙였을 때 더 큰 결과를 기준으로 정렬
        number.sortWith(Comparator { a, b ->
            (b + a).compareTo(a + b) // b+a가 a+b보다 크면 b가 앞으로 오도록 정렬
        })

        // 정렬된 문자열 리스트를 하나의 문자열로 결합
        val result = number.joinToString("")

        // 결과가 "0"으로 시작하면 "0" 반환 (예: [0, 0, 0] -> "0")
        return if (result.startsWith("0")) "0" else result
    }
}

정렬 과정 예제: number = [3, 30, 34, 5, 9]

  1. 문자열로 변환: ["3", "30", "34", "5", "9"]
  2. 정렬 기준:
    • "9" + "5" = "95", "5" + "9" = "59" → "9" 앞
    • "5" + "34" = "534", "34" + "5" = "345" → "5" 앞
    • "34" + "3" = "343", "3" + "34" = "334" → "34" 앞
    • "3" + "30" = "330", "30" + "3" = "303" → "3" 앞
  3. 정렬 결과: ["9", "5", "34", "3", "30"]
  4. 결합: "9534330"

'코딩테스트 준비(kotlin) > 정렬' 카테고리의 다른 글

[프로그래머스, 코틀린] H-Index  (0) 2025.01.10