TIL #26

loci·2024년 5월 26일
0

TIL

목록 보기
25/111

숫자 짝꿍

겹치는 숫자를 찾아 가장 큰 수를 만들어야 한다.

겹치는 숫자도 찾아야하지만 런타임 시간초과를 해결하는게 문제였다.


나의 코드

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
    }
}
profile
편리한 개발자

0개의 댓글