개발조각

[프로그래머스] 이진 변환 반복하기 본문

알고리즘🅰/프로그래머스

[프로그래머스] 이진 변환 반복하기

개발조각 2022. 4. 21. 16:05
728x90
반응형

이번문제는 쉬운편이라 쉽게 풀었습니다.😊

 

 

이번 문제는 "입출력 예 설명"만 보셔도 쉽게 풀것같아요.


해결방안

function solution(s) {    
    let count = 0;
    let totalZero = 0;
    let removeZero;
    
    while(s !== '1'){
        removeZero = [...s].filter(a => a === '1').length;
        totalZero += s.length - removeZero;
        s = removeZero.toString(2);
        count++;
    }
    return [count, totalZero]
}
  • const : s가 "1"이 될 때까지 이진 변환의 횟수
  • totalZero : 제거된 모든 0의 개수
  • removeZero : "0"이제거된 s의 길이

 

 

while(s !== '1')

while문은 s !== '1'(s가 '1'이 아닐 때)까지 반복해주었습니다.

 

 

removeZero = [...s].filter(a => a === '1').length;

s에서 0을 제거하는 방법으로는 filter()메서드를 사용해주었습니다.

filter()메서드는 배열에서만 사용 가능하기 때문에 스프레드 연산자를 사용해 주어 문자열s를 배열s로 만들어 주었습니다.

 

배열s에서 원소가 1인 값만 남겼고 그 길이를 removeZero에 담아주었습니다.

 

 

totalZero += s.length - removeZero;

제거된 0의 개수는 s의 길이 - "0"이제거된 s의 길이를 해주면 나옵니다.

+=를 사용해서 반복될때마다 누적해주었습니다. 

 

 

s = removeZero.toString(2);

다음 반복을 위하여 s에 removeZero("0"이제거된 s의 길이)의 2진법을 넣어주었습니다.

 

 

count++;

위의 과정이 끝나면 count+1를 해주었습니다.

 

 

return [count, totalZero]

while문이 반복하다보면 s === '1'이 됩니다.

이과정을 통해 나온 count, totalZero 값을 return 값에 담아주었습니다.


프로그래머스 이진 변환 반복하기 해결방안 설명은 여기까지입니다.

728x90
반응형
Comments