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

2023. 1. 19. 16:00기록/Programmers

    목차

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/70129

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


나의 문제 풀이

function solution(s) {
  let answer = [0, 0];

  while (s !== '1') {
    const zeroCnt = s.match(/0/g) ? s.match(/0/g).length : 0;
    answer[1] += zeroCnt;

    const length = s.length - zeroCnt;
    s = length.toString(2);
    answer[0]++;
  }
  return answer;
}
  • 주어진 문자열이 1이 될 때까지 반복함
  • 0의 갯수를 카운트해서 변수에 할당함
    • 0의 갯수를 정답 배열의 두번째 요소에 누적 (제거한 0의 갯수)
  • 0을 제거한 문자열의 길이 : 문자열의 길이 - 0의 갯수
  • 문자열의 길이를 2진법으로 변환함
    • 변환 후 정답 배열의 첫번째 요소에 1을 누적 (변환 횟수)

다른 사람의 문제 풀이

function solution(s) {
    var answer = [0,0];
    while(s.length > 1) {
        answer[0]++;
        answer[1] += (s.match(/0/g)||[]).length;
        s = s.replace(/0/g, '').length.toString(2);
    }
    return answer;
}