Moments of growth

[Lv2 Koltin] 이진 변환 반복하기 본문

카테고리 없음

[Lv2 Koltin] 이진 변환 반복하기

뮤링이 2022. 9. 17. 17:14

[내 코드] 

class Solution {
    fun solution(s: String): IntArray {
        var ss = s
        var len = s.length
        var n = 0 //0의 개수
        var totalN = n
        var cnt =  0
        while(ss!="1"){
            for(i in ss){
                if(i=='0'){
                    n++
                }
            }
            ss = (len-n).toString(2)
            len = ss.length
            totalN += n
            n=0
            cnt++
        }

        return intArrayOf(cnt, totalN)
    }
}

너무 더럽다.. 

 

매개변수로 받아온 s는 val이므로 var ss = s로 var 형태로 변경

s의 길이를 len으로, n은 0의 개수, totalN은 지워진 0의 총 개수, cnt는 총 몇번 변환했는지이다.

ss가 1이 될 때까지 반복( 0 숫자를 카운트해서 n에 저장, len-n은 0 제거 후의 길이, 그것을 이진수로 바꾸려면 toString(2),이 값을 ss에 넣는다. 이 길이를 다시 len에 저장하고, totalN에 n의 갯수 더해줌, n을 다시 0으로 초기화, cnt++)

 

ss가 1이 되면 while문 빠져나오고 cnt와 totalN값 return

 

 

[다른 사람 풀이]

fun solution(s: String): IntArray {
        var copiedS = s
        var removedZero = 0
        var count = 0

        while (copiedS != "1") {
            removedZero += copiedS.replace("1", "").count() // 0의 개수
            copiedS = (copiedS.replace("0", "").count()).toString(2) // 0 제거 후 길이를 이진수로 
            count++
        }
        return intArrayOf(count, removedZero)
    }

replace("a", "b") : a를 모두 b로 변경해줌

 

Comments