숫자 짝꿍
겹치는 숫자를 찾아 가장 큰 수를 만들어야 한다.
겹치는 숫자도 찾아야하지만 런타임 시간초과를 해결하는게 문제였다.
나의 코드
class Solution {
fun solution(X: String, Y: String): String {
var answer: String = ""
var arr1 = IntArray(10)
var arr2 = IntArray(10)
var temp = ""
for (i in X){
arr1[i.toInt()-48] += 1
}
for (i in Y){
arr2[i.toInt()-48] += 1
}
for(i in 0..9){
if (arr1[i] != 0 && arr2[i] != 0){
if(arr1[i] <= arr2[i]){
temp += i.toString().repeat(arr1[i])
} else if(arr1[i] > arr2[i]){
temp += i.toString().repeat(arr2[i])
}
}
}
answer = temp.toList().sortedDescending().joinToString("")
if(answer == ""){
return "-1"
} else if (answer.toInt() == 0){
return "0"
}
return answer
}
}
시간초과로 수정
class Solution {
fun solution(X: String, Y: String): String {
var answer: String = ""
var arr1 = IntArray(10)
var arr2 = IntArray(10)
var temp = ""
for (i in X){
arr1[i-'0']++
}
for (i in Y){
arr2[i-'0']++
}
val result = StringBuilder()
for(i in 9 downTo 0){
val count = minOf(arr1[i], arr2[i])
if (count>0){
result.append(i.toString().repeat(count))
}
}
answer = result.toString()
return when {
answer.isEmpty() -> "-1"
answer.all { it == '0' } -> "0"
else -> answer
}
}
}
시간초과의 원인은 0을 찾는 과정에서 answer.toInt()을 했을때 큰 수 일때 toInt()가 오래걸렸다. 그래서 이부분을 수정해주니 통과됨
다른사람의 코드
import kotlin.math.min
class Solution {
fun solution(X: String, Y: String): String {
var answer: String = ""
for (ch in (9 downTo 0).toList().map { it.toString() }) {
answer += ch.toString()
.repeat(min(X.count { it.toString() == ch },
Y.count { it.toString() == ch }))
}
if (answer.isEmpty()) answer = "-1"
if (answer.toList().distinct() == listOf('0')) answer = "0"
return answer
}
}