본문 바로가기
Coding Test/JavaScript

[Javascript] (프로그래머스 level 2) 이진 변환 반복하기

by Chaedie 2022. 7. 1.
728x90

[Javascript] (프로그래머스 level 2) 이진 변환 반복하기

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

내 풀이

function solution(s) {
    // 이진변환 : 모든 0을 제거, x의 길이를 c라하면 c를 2진법으로 표현한 문자열 로 변경
    // s가 1이 될때까지 이진변환하기, return {이진변환의 횟수, 제거된 0의 갯수}
    const answer = {
        count : 0,
        popedZero : 0,
        s : s,
    }

    while(true) {
        binaryConversion(answer);
        if (answer.s === '1') {
            return [answer.count, answer.popedZero];
        }
    }

    return 
}

function binaryConversion(answer) {
    let preLen = answer.s.length;
    answer.s = answer.s.split('').filter((x) => x === '1').join('')
    let proLen = answer.s.length;

    answer.count += 1;
    answer.popedZero += (preLen - proLen);
    answer.s = answer.s.length.toString(2);

    return;
}
  • 문제를 계속 풀어보면서 obj를 사용하는게 엄청 익숙해졌다. 특히 함수로 넘길때 변수를 넘기고 리턴으로 받고 하는게 골치아파서 그냥 object로 던지고 알아서 받게 만드는게 좀 꿀이라고 느끼는 중이다.

다른 사람 풀이

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;
}
  • 와 깔끔하네요. 없애는 0의 갯수는 원래 s의 0의 갯수랑 같으니까.. ! 굳이 빼기 할 필요도 없었네요!
  • 짧은 코드는 함수로 안만드는게 훨씬 깔끔.. ㅋㅋ

댓글