-
728x90
문제설명
https://school.programmers.co.kr/learn/courses/30/lessons/70129
제한사항
- s의 길이는 1 이상 150,000 이하입니다.
- s에는 '1'이 최소 하나 이상 포함되어 있습니다.
입출력 예
s result "110010101001" [3,8] "01110" [3,3] "1111111" [4,1] 문제풀이
function solution(s) { let count = 0; let zero = 0; // s가 "1"만 남을 때 까지 반복하기 while(s !== "1") { let sLength = s.length s = s.replace(/0/g, '') let zeroLength = s.length; s = zeroLength.toString(2) zero += sLength - zeroLength count++ } return [count, zero]; }
주어진 문자열에 0을 없애고 0을 없앤 길이에 이진변환을 하는데 이진 변환한 값이 "1"이 될 때 까지 계속 반복하기
나는 toString() 메소드를 그냥 문자열 반환하는 걸로만 생각했는데 Number객체에 사용할 땐 문자 또는 진수로 변환하는 역할이었다..!
count는 몇 번 이진 변환을 가했는지, zero는 0의 개수를 담을 변수. while로 s가 "1"만 남을 때 까지 계속 반복하도록 했다.
replace함수에 정규표현식을 사용해서 0이 있는 자리를 제거하고 원래 s의 길이와 0을 뺀 길이를 변수에 담는다.
toString() 기본은 10진수로, 괄호 안에 2를 넣어 10진수를 2진수로 변환한다.
0의 개수는 s의 원래 길이에서 2진 변환한 개수를 빼주고, count도 증가시켜준 후 while 루프가 끝나면 배열로 반환한다.
'코딩테스트, 알고리즘' 카테고리의 다른 글
[프로그래머스] 영어 끝말잇기 (JS) (0) 2023.09.04 [프로그래머스] 올바른 괄호 (JS / Stack) (0) 2023.08.27 [프로그래머스] 이상한 문자 만들기 (JS) (0) 2023.08.23 [프로그래머스] 문자열 내 마음대로 정렬하기 (JS) (0) 2023.08.19 [프로그래머스] 삼총사 (JS) (0) 2023.08.18 댓글