본문 바로가기
자료구조&알고리즘/코딩테스트 문제연습

프로그래머스 Lv.2 이진 변환 반복하기 (JavaScript)

by 복숭아 우유씨 2022. 9. 17.

자바스크립트로 프로그래머스 문제 풀기

문제

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

문제에 변환 단계가 여러단계라서 헷갈릴 수 있다. 이 글에는 생략했으나 문제 링크로 이동시 입출력 예시에 대한 설명이 자세히 나와 있다.

 

문제를 자세히 읽어보면, 변환해야 하는 것이

 "문자열 → 0을 제거(기록필요) → 제거하고 남은 수의 자릿수 계산 → 자릿수를 2진수로 변환" 이렇게 진행하는 것을 한번의 변환으로 보고, 이 변환을 2진수가 1이 될때까지 반복한다.

최종적으로 총제거한 0의 수와 변환 횟수를 구하면 된다.

풀이

 

나의 풀이

function solution(s) {
    var answer = [0, 0]; //정답의 초기값을 모두 0으로 할당하였다.
    let tmp = [];
    while(s.length > 1) { //길이가 1이 될때까지 반복한다.
        tmp = s.split("").filter(e => e == 1); //문자열을 쪼개서 배열에 넣고, 필터메서드로 1만 남겼다.
        answer[1] += (s.length - tmp.length); //제거한 0의 갯수를 anwer에 더한다.
        s = tmp.length.toString(2); //배열의 길이를 2진수로 변환하였다.
        answer[0]++; //변환횟수를 추가하였다.
    }

    return answer;
}

 

처음에 입력값이 문자열로 주어지기 때문에, 이를 배열로 변환해서 배열의 메서드들을 활용하여 풀이했다.

 

 

다른 사람들 풀이

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;
}

정규표현식을 사용해서 문자열을 배열로 변환하지 않고도 쉽게 답을 도출하였다.

정규표현식도 사용하는 연습을 해야겠다. 

 * 이 문제에서 사용한 정규표현식과 메서드

"문자열".match(/정규표현식/플래그) : 문자열이 정규표현식과 일치하는 부분을 검색해서 배열로 반환한다.

"문자열". replace(/정규표현식/플래그/대체문자열) : 문자열에서 정규표현식과 일치하는 부분을 대체문자열로 변환한다.

 (정규표현식에 대해 참고하기 좋은 글을 소개합니다 : https://curryyou.tistory.com/234 )

 

 

 
 

댓글