0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
단순히 끝자리에서부터 정렬하면 해결할 수 있는 문제라고 생각했다.
최대 4자리 수의 보기가 주어졌기 때문에, 해당 자리 수가 없는 경우에 0이라고 가정하고 끝 자리 수부터 정렬해봤다.
fun solution(numbers: IntArray): String {
var answer = ""
val list = numbers
.sortedByDescending { it.toString().getOrElse(3) { '0' } }
.sortedByDescending { it.toString().getOrElse(2) { '0' } }
.sortedByDescending { it.toString().getOrElse(1) { '0' } }
.sortedByDescending { it.toString().getOrElse(0) { '0' } }
return list.joinToString("")
}
테스트 케이스 중, 절반은 맞고 절반은 틀리게 되었는데 0이 포함된 경우 해당 자리 수가 없는 경우와 동일하게 해석했기 때문에 이런 결과가 나왔다고 생각했다.
fun solution(numbers: IntArray): String {
val numberList = numbers.map {
val first = it.toString()[0].toString().toInt()
Pair(
it, when (it.toString().length) {
1 -> it * 100 + it * 10 + it
2 -> it * 10 + first
3 -> it
else -> it / 10
}.toLong()
)
}.sortedByDescending { it.second }.toMutableList()
if (numberList.first().first == 0) return "0"
for (i in 0 until numberList.size - 1) {
if (numberList[i].second == numberList[i + 1].second) {
if ((numberList[i].first.toString() + numberList[i + 1].first.toString()).toLong() <
(numberList[i + 1].first.toString() + numberList[i].first.toString()).toLong()
) {
numberList.add(i, numberList.removeAt(i + 1))
}
}
}
return numberList.map { it.first }.joinToString("")
}
3자리 이하의 숫자에는 첫번째 수를 계속 이어주었고, 그 숫자가 같을때는 두 숫자를 이어붙인 수를 비교해서 큰 쪽을 우선적으로 배치하게끔 해주었다. 그러나 테스트케이스 1~6번을 통과하지 못했고, 질문하기에서도 답을 얻을 수 없었다.. 대신 약간의 힌트를 통해 코드를 다시 짤 수 있었다.
fun solution(numbers: IntArray): String {
val numberList = numbers.sortedWith { first, second ->
"$second$first".compareTo("$first$second")
}
if (numberList.first() == 0) return "0"
return numberList.map { it }.joinToString("")
}
sortedWith를 통해 훨씬 간단하게 정렬할 수 있었다.
한 줄로도 작업할 수 있지만 가독성을 위해 남겨두기로 했다.
2차 수정을 하기까지 꼬박 하루동안 수많은 시행착오를 겪었고,
테스트케이스를 통과하지 못한 이유를 알게 된다면 추후에 수정하기로 마음먹었다..! ㅠ