프로그래머스 이진 변환 반복하기
0과 1로 이루어진 문자열 s가 1이 될 때까지 주어진 규칙으로 이진법 변환을 계속 하였을 때, 변환 횟수와 제거된 0의 개수를 배열에 담아 반환하세요.
주어진 이진법 변환 규칙
문자열 x에 있는 0을 모두 제거한 후 x의 길이를 2진법으로 표현한 문자열로 바꾸세요.
본래 s길이 - 1만 남겨진 문자열의 길이
를 0제거 개수에 더해줍니다.while(s !== "1"){
s가 1이 될 때까지 변환이 반복되어야하므로 while
문안에서 코드를 작성해줍니다.
let sArr = s.split("");
let filtered = sArr.filter((x) => x !== "0").length;
문자열 s를 배열로 만들어 준 뒤,
filter
를 사용하여 0이 제거된 배열의 길이를 filtered
변수에 담아주었습니다.
answer[0]++;
answer[1] += s.length - filtered;
배열 형태로 선언된 answer의 첫번째 아이템에는 변환 횟수를,
두번째 아이템에는 본래 s의 길이에서 필터링된 배열의 길이를 빼준값을 더해줍니다.
s = filtered.toString(2);
규칙대로 filtered의 길이를 toString
을 사용하여 2진수로 변환해줍니다.
function solution(s) {
let answer = [0, 0];
while(s !== "1"){
let sArr = s.split("");
let filtered = sArr.filter((x) => x !== "0").length;
answer[0]++;
answer[1] += s.length - filtered;
s = filtered.toString(2);
}
return answer;
}