처음부터 차근차근

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

코딩테스트/Javascript

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

HangJu_95 2023. 11. 1. 15:55
728x90

문제 링크

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

문제 설명

내 풀이

function solution(s) {
    var answer = [0,0];
    let result = method(answer, s)
    return result
}

function method(array, s) {
    if (s === "1") {
        return array
    } else {
        array[0]++
        let deleteS = s.replaceAll('0','')
        array[1] += s.length - deleteS.length
        let parseS = deleteS.length.toString(2)
        return method(array, parseS) 
    }
}

재귀함수를 사용하여 문제를 풀었다.

다른 사람의 풀이

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를 사용하였으며, while문을 사용하였다.

오늘 배운 점

  • 찾아보니, n진수에서 10진수로 변환하는 방법도 존재한다.

parseInt 함수를 사용한다면, n의 진수에서 10진수로 변환이 가능하다.

var binary = "1111111111";
var decimal = parseInt(binary, 2);	// 2진수에서 10진수로

var octal = "1777";
var decimal = parseInt(octal, 8);	// 8진수에서 10진수로

var hex = "3ff";
var decimal = parseInt(hex, 16);	// 16진수에서 10진수로