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] |
s
문자열을 배열로 만들고 while반복문을 통해 문자열s
가 "1"
이 될때까지 반복하도록한다. while문안에서는 s
문자열에서 제거한 0의 갯수인 zerocount
를 카운트하는 로직과 0을 제거한 길이의 이진 변화를 반환하는 binary
함수로직을 수행한다. 그리고 위의 로직들을 모두 한번씩 수행할때 마다 count
를 1씩 더해 로직을 수행하는 횟수를 체크한다.
function binary(num){ // 2진변환 과정
const data = [...num]
const reset = data.filter((e)=>
e !== "0")
return reset.length.toString(2)
}
function solution(s) {
var answer = [];
let count = 0
let zerocount = 0
while(s != "1"){
for(i = 0 ; i < s.length ; i++){ //0갯수 count
s[i] === "0" ? zerocount++ : zerocount
}
s = binary(s)
count++
}
answer.push(count,zerocount)
return answer;
}
그렇게 어렵지 않은 문제였지만 위의 코드에서 0을 count해주는 함수도 만들어 주려다 실패하여 그냥 binary함수 하나만 만들어주어 문제를 풀었다. 여러 함수를 만들어주어 풀어주는 방식 또한 생각해봐야겠다.