본문 바로가기
일반 학습/코딩 테스트

[프로그래머스] 이진 변환 반복하기

by StelthPark 2022. 4. 29.

처리조건

더보기
https://programmers.co.kr/learn/courses/30/lessons/70129?language=javascript

풀이

처음 조건은 현재 s에 0이 있는지 확인 후 있다면 0을 모두 제거하고 제거한 0만큼 카운터를 쌓아준다. 그리고 남은 1들의 길이를 잰 다음 해당 길이를 다시 2진수로 바꾸면 1과0로 조합된 이진수형태가 될 것이다. 다시 여기서 처음 조건문부터 반복해주어야하며 길이가 1이 될 때 반복을 종료하면 된다.

우선 01110을 입력값 기준으로 생각해보자. 들어온 값에 0이 포함됐으므로 0을 제거해주어야한다. 제거한 0의 카운터를 +2해준다. 111만 남게 되고 111의 길이인 3을 이진형태로 바꾸면 11이 된다. 11은 0이 포함되어 있지 않다. 바로 길이인 2를 이진형태로 바꾸면 10이 된다. 0이 포함되어 있다 0을 한개 제거하며 0의 카운터에 +1를 해준다. 1이 되므로 종료되게 되며 총3회차에 0의 카운터는 3이된다. [3,3]을 리턴한다.

단순 조건문에 맞게 처리하면 되는 문제로 난이도2 치고는 굉장히 쉽다.

function solution(s) {
  let zeroCount = 0;
  let convertCount = 1;
  let arrString = s.split("");
  while (arrString.length > 1) {
    if (arrString.includes("0")) {
      arrString = arrString.filter((el) => {
        if (el === "0") {
          zeroCount++;
        } else if (el === "1") return el;
      });
    } else {
      arrString = arrString.length.toString(2).split("");
      convertCount++;
    }
  }
  return [convertCount, zeroCount];
}

 

댓글