post-custom-banner

문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/70129

문제

문제 설명

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'이 최소 하나 이상 포함되어 있습니다.

입출력 예시

입출력 예 설명


내 풀이

function solution(s) {
    let answer = [];
    let trans_cnt = 0;//이진변환 세는 변수
    let zero_cnt = 0;//0 세는 변수
    //아이디어
    //반복문을 통해서 1이 될때까지
    //replace 메서드 사용
    // s = s.replace(/0/g, '');
    while(s.length != 1){
	s.split('').map(i => {if(i == 0){zero_cnt++;}}).join('');//0의 갯수를 세고
        s = s.replace(/0/g, '');//0을 제거
        s = s.length.toString(2)//길이를 2진변환
        trans_cnt++;
    }
    // s = s.length.toString(2)
    // console.log(s)
    
    answer.push(trans_cnt, zero_cnt)
    return answer;
}

JS에서 진수변환은 num.toString(2) 이런식으로 매우 간편하게 할 수 있다. 그리고 문자열에서 특정 부분을 교체할 수 있는 replace메서드를 사용해서 매우 간단하게 풀었다.

while(){
  문자열을 배열로 바꾸어 0의 개수를 카운트하고
  문자열에서 0을 제거한다
  0을 제거한 문자열의 길이를 다시 s에 할당해준다
}

while문 조건이랑 문제를 잘 읽으면 여러 방법으로도 잘 풀 수 있는 그런 문제라고 생각한다.

profile
Junior Frontend Engineer
post-custom-banner

0개의 댓글