문제 링크
문제 해설
기본적으로는 정렬을 활용한 문제지만 정렬 기준을 어떻게 할지가 관건인 문제라고 볼 수 있다. 수를 이어붙여서 더 큰수를 만들기 위해서는 수를 문자열로 다뤄야 한다.
정렬 기준자체는 굉장히 간단하다. s1과 s2가 있을 때, s1 + s2와 s2 + s1 중 더 큰것이 우선적으로 오도록 정렬하면 된다. 예를 들어 123과 45가 있을 때 12345보다 45123이 더 크기 때문에 [45, 123]으로 정렬할 수 있다.
출력 조건에 수는 0으로 시작하면 안되며, 0이 정답인 경우에는 0 하나만 출력해야 한다고 되어 있는데, 상술한 조건대로 정렬한 숫자들을 나열한 결과가 0이 아닌 수라면 0으로 시작할 수 없다. 따라서, 배열의 0번째 요소가 0이라면 0을 출력하면 된다. 또는, 배열에서 0의 개수가 배열의 크기와 같은 경우도 정답이 0인 경우에 해당한다. 두 경우 모두 시간차이가 발생하진 않았다.
Code
import java.util.StringTokenizer
fun main() = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
val numbers = StringTokenizer(readLine()).run { Array(n) { nextToken() }.sortedArrayWith { o1, o2 -> (o2 + o1).compareTo(o1 + o2) } }
println(numbers.takeUnless { it.count { c -> c == "0" } == it.size }?.joinToString("") ?: 0)
}
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 11440 : 피보나치 수의 제곱의 합 (0) | 2023.04.07 |
---|---|
[Kotlin] 백준 2812 : 크게 만들기 (0) | 2023.04.04 |
[Kotlin] 백준 24389 : 2의 보수 (0) | 2023.03.30 |
[Kotlin] 백준 22252 : 정보 상인 호석 (0) | 2023.03.23 |
[Kotlin] 백준 17830 : 이진수씨의 하루 일과 (0) | 2023.03.21 |
댓글