Apple is Apple
article thumbnail

문제 설명

0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.
   1. x의 모든 0을 제거합니다.
   2. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다.
예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다.

0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.

 


제한 조건

  • s의 길이는 1 이상 150,000 이하입니다.
  • s에는 '1'이 최소 하나 이상 포함되어 있습니다.

입출력 예

 

입출력 예



s result
"110010101001"  [3,8]
"01110" 
[3,3]
"1111111"  [4,1]

코드

class Solution {
    fun solution(s: String): IntArray {
        var answer = intArrayOf(0,0)
        var new = s
        while(new != "1"){
            answer[0]++
            answer[1] += new.count{it=='0'}
            new = new.replace("0", "").length.toString(2)
        }
        return answer
    }
}

풀이

문제의 조건대로 코드를 작성해주면 된다.

 

new 라는 변수가 "1"이 될 때까지, 계속 바꿔줘야하므로 while문을 통해 반복을 돌려준다.

answer의 첫번째 요소에는 반복인 한 횟수를 원한다고 했으니 반복문 내에서 한 번 돌때마다, 1을 증가시켜준다.

두번째 요소에는 바뀌면서의 0의 갯수를 알고 싶다고 하였으니 count메소드와 판별식을 주어 0의 개수를 파악시켜 계속 증가시켜준다. 

 

매변 answer의 연산이 끝나면, 모든 0을 제거하기위해 replace 메소드를 통해 빈 문자로 치환하고, toString(num) 메소드를 통해 이진변환을 한다.

 

이 연산을 계속 수행하다 new == "1" 이되면 반복이 멈추고 결과가 나오게 된다.    

 

결과

안정적으로 통과한 것을 볼 수 있다.

profile

Apple is Apple

@mjjjjjj