프로그래머스, 자바스크립트) 이진 변환 반복하기

2025. 5. 21. 23:58·개발/알고리즘(코딩테스트)

 이진 변환 반복하기

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

풀이

메모리: 36.6 MB, 시간: 13.11 ms

 

먼저 필요한 값을 변수로 뽑는다.

1이 될때까지 반복 < 이라는 말을 보고 while 문을 1이 아닐때만 실행하는 조건으로 짰다.
0의 개수는 문자열을 '0' 기준으로 나눈 뒤 공백의 개수를 세어 계산했고

이진 변환 횟수는 변환이 한 번 일어날 때마다 1씩 증가시켰다.

function solution(s) {
  //이진 변환 횟수와 변환 과정에서 제거된 0를 배열에 담아라...

  let num = s;
  let count = 0; // 이진 변환 횟수
  let removedZero = 0; // 제거한 0의 총 개수

  while (num !== "1") {
    //1이 될때까지 계속 반복
    removedZero += num.split("0").length - 1;

    // 0 제거 후 길이 확인
    const newLength = num.replace(/0/g, "").length;

    // 길이를 이진수로 변환
    num = newLength.toString(2);

    count++;
  }
  return [count, removedZero];
}

다른 풀이

메모리: 38.3 MB, 시간: 9.30 ms

 

split("0").length - 1 → 0의 개수를 구하기 위해 전체 배열을 생성 

replace(/0/g, "") → 문자열 새로 만듦

 

이 두 가지 문제를 개선해 시간을 단축시켰다. 

  while (num !== "1") {
    let ones = 0;

    for (let char of num) {
      if (char === "1") ones++; //문자열에서 1 개수 파악
    }

    removedZero += num.length - ones; //전체-1개수 = 0개수
    num = ones.toString(2); //1의 길이만큼 이진법
    count++;
  }

문자열을 순회해서 1의 개수를 카운트 하고 전체 길이에서 빼줘서 0의 수를 구한다.

그리고 1의 개수를 계산해서 다시 이진법으로 돌린다 이러면 ones이라는 변수로 두가지 값 모두 구할 수 있다.

function solution(s) {
  let num = s;
  let count = 0;
  let removedZero = 0;

  while (num !== "1") {
    let ones = 0;

    for (let char of num) {
      if (char === "1") ones++;
    }

    removedZero += num.length - ones;
    num = ones.toString(2);
    count++;
  }

  return [count, removedZero];
}

 

저작자표시 비영리 변경금지 (새창열림)

'개발 > 알고리즘(코딩테스트)' 카테고리의 다른 글

프로그래머스, 자바스크립트) 예산  (1) 2025.05.22
프로그래머스, 자바스크립트) 두 개 뽑아서 더하기  (0) 2024.11.19
프로그래머스, 자바스크립트) 올바른 괄호  (0) 2024.11.18
프로그래머스, 자바스크립트) JadenCase 문자열 만들기  (0) 2024.11.17
프로그래머스, 자바스크립트) 최솟값 만들기  (0) 2024.11.15
'개발/알고리즘(코딩테스트)' 카테고리의 다른 글
  • 프로그래머스, 자바스크립트) 예산
  • 프로그래머스, 자바스크립트) 두 개 뽑아서 더하기
  • 프로그래머스, 자바스크립트) 올바른 괄호
  • 프로그래머스, 자바스크립트) JadenCase 문자열 만들기
빔네모
빔네모
console.log("빔네모")
  • 빔네모
    bimnemo("개발")
    빔네모
  • 전체
    오늘
    어제
    • 기록 (146) N
      • 기술 (37)
        • JavaScript (1)
        • TypeScript (9)
        • React.js (10)
        • Next.js (0)
        • 라이브러리,도구 (4)
        • HTML,CSS (4)
        • CS (5)
        • BE (4)
      • 개발 (97) N
        • 프로젝트 (0)
        • 트러블슈팅 (5)
        • 알고리즘(코딩테스트) (92) N
      • 정보 (4)
      • 취미 (8)
        • 감상 (8)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
빔네모
프로그래머스, 자바스크립트) 이진 변환 반복하기
상단으로

티스토리툴바