반응형
Lv. 2. 이진 변환 반복하기
문제
0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.
- x의 모든 0을 제거합니다.
- 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'이 최소 하나 이상 포함되어 있습니다.
입출력 예
자료구조
① 정수: zeroCount, turnCount
② 배열: arr
알고리즘
① 반복 (Loop) 시작:
`arr`의 길이가 1이 될 때까지 반복합니다. 각 반복은 다음 단계를 포함합니다:
- '0' 제거:
- 배열을 뒤에서부터 순회하며 각 요소를 검사합니다. (앞에서 부터 순회하면 spice로 i의 순서 문제가 생김)
- '0'을 발견하면, 그 요소를 제거하고 `zeroCount`를 1 증가시킵니다.
- 이 과정이 완료되면 `arr`는 '1'로 이루어진 배열이 됩니다.
- 반복 길이를 이진수로 변환
- 현재 `arr`의 길이를 이진수로 변환하고 그 결과를 다시 배열로 변환하여 `arr`에 저장합니다.
- `turnCount`를 1 증가합니다.
② 결과 반환:
- 배열의 길이가 1이 되면 반복을 종료하고 `[turnCount, zeroCount]`를 반환합니다.
소스 코드
function solution(s) {
let zeroCount = 0;
let turnCount = 0;
let arr = Array.from(s);
while (arr.length !== 1) {
for (let i = arr.length - 1; 0 <= i; i--) {
if (arr[i] === "0") {
arr.splice(i, 1);
zeroCount++;
}
}
arr = Array.from((arr.length).toString(2));
turnCount++;
}
return [turnCount, zeroCount];
}
✔ 출처
https://school.programmers.co.kr/learn/courses/30/lessons/70129
반응형
'JS 코딩테스트 > 문제풀이' 카테고리의 다른 글
[자바스크립트] 피보나치 수 (0) | 2024.08.20 |
---|---|
[자바스크립트] 롤케이크 자르기 (0) | 2024.08.17 |
[자바스크립트] 튜플 (0) | 2024.08.12 |
[자바스크립트] 피로도 (0) | 2024.08.07 |
[자바스크립트] 게임 맵 최단거리 (0) | 2024.08.05 |