https://school.programmers.co.kr/learn/courses/30/lessons/70129
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
노트북이 무거워서 최근에는 아이패드에 블루투스 키보드를 들고 다녔다. 그리고 codepen에 들어가서 문제를 푼다.
테스트 할 것들이 많지 않다면 충분함 가벼운게 최고지
그리고 티스토리 스킨 편집법 알게돼서 폰트도 바꾸고 코드블록 행간도 띄워줬다.
문제
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'이 최소 하나 이상 포함되어 있습니다.
입출력 예
"110010101001" | [3,8] |
"01110" | [3,3] |
"1111111" | [4,1] |
접근 과정
1이 될 때까지 반복시켜야 한다. 재귀인가 생각하다가 대부분의 경우 재귀는 너무 느렸던 것과 이 문제가 횟수를 구해야 한다는 걸 떠올리고 while 문을 사용하기로 했다.
1. 문자열이 1이 될 때 까지 while문으로 변환 코드를 반복한다.
2. 사라진 0의 개수를 구해준다. 나는 0을 없애기 전 길이와 없앤 후의 길이를 비교해서 구했다.
3. 변환 과정이 끝나면 변환 횟수를 세주는 변수 count에 1을 추가한다.
해결 코드
function solution(s) {
let count = 0;
let char = s;
let zeroCount = 0;
while(char !== "1") { //(1)
zeroCount += char.length - char.split("0").join("").length; //(2)
char = char.split("0").join("").length.toString(2);
count++; //(3)
}
return [count, zeroCount]
}
생각
나는 자꾸 문자열을 배열로 변환해서 푸는데 다른 방법을 찾아야 하지 않을까....
배열 메서드가 너무 편함
'알고리즘' 카테고리의 다른 글
[LeetCode] Rotate Array (0) | 2023.03.04 |
---|---|
[프로그래머스] 최소직사각형 (0) | 2022.11.02 |
[프로그래머스] 올바른 괄호 (0) | 2022.10.22 |
[프로그래머스] 시저 암호 (자바스크립트) (0) | 2022.10.12 |
[프로그래머스] H-index (자바스크립트) (0) | 2022.10.10 |
댓글