알고리즘🅰/프로그래머스
[프로그래머스] 이진 변환 반복하기
개발조각
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
반응형