프로그래머스 lv2 이진 변환 반복하기
0과 1로 이루어진 문자열에 대해 다음과 같은 변환 과정을 거친다.
- x의 모든 0을 제거한다.
- x를 "x의 길이를 2진법으로 표현한 문자열"로 바꾼다.
예시) x='110010101001'
1) 0을 제거 > x='111111'
2) x의 길이를 2진수로 표현 > x의 길이가 6이므로 2진수로 바꾸면 '110' > x='110'
위의 과정을 x가 1이 될 때까지 반복한다. 2진 변환 과정을 거친 횟수와 제거한 0의 개수를 배열로 출력한다.
입출력▽
s | result |
'110010101001' | [3, 8] |
1) 우선 s의 1과 0을 구분하여 1은 저장하고, 0은 개수를 센다.
var answer = [0, 0];
let one = '';
for (let i = 0; i < s.length; i++) {
(s[i] == 1) ? one += '1' : answer[1]++;
}
s의 1을 따로 저장할 one 변수를 선언해 주었다. 최종 결과물을 배열로 출력해야 하므로 배열에 0의 개수(배열 index 1 자리)를 카운트업 한다.
2) 1을 저장한 one의 길이를 재어 2진수로 변환하고 다시 s에 할당해 준다. 이때 2진 변환 횟수(배열 index 0 자리)를 카운트업 한다.
s = Number(one.length).toString(2);
answer[0]++;
3) 위의 과정을 s가 '1'이 될 때까지 무한 반복하기 위해 for문을 조건없이 작성하고 마지막에 조건 break를 걸어둔다.
for (;;) {
//1, 2번 코드 내용 넣을 자리
if (s === '1') break;
}
마무리.
function solution(s) {
var answer = [0, 0];
for (;;) {
let one = '';
for (let i = 0; i < s.length; i++) {
(s[i] == 1) ? one += '1' : answer[1]++;
}
s = Number(one.length).toString(2);
answer[0]++;
if (s === '1') break;
}
return answer;
}
'[프로그래머스]' 카테고리의 다른 글
[js] 프로그래머스 - 로또의 최고 순위와 최저 순위 (0) | 2022.09.08 |
---|---|
[js] 프로그래머스 - 소수 찾기 (0) | 2022.08.31 |
[js] 프로그래머스 - 시저 암호 (0) | 2022.08.29 |
[js] 프로그래머스 - 성격 유형 검사하기 (0) | 2022.08.26 |
댓글