[백준 | Javascript] 1373

박기영·2022년 9월 9일
0

백준

목록 보기
116/127

알고리즘 기초 1/2. 301 - 수학 1(연습)
1373번. 2진수 8진수

문제

1373번 문제 링크

solution

const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("").map((item) => Number(item));

let ans = [];

// input = [1,1,0,0,1,1,0,0]
while(input.length > 0){
    let twoTo8;
    
    // 3개 이상이면 뒤에서부터 3개를 잘라내고
    // 3개 미만이면 앞에서부터 남은 개수 전부를 잘라낸다.
    if(input.length >= 3){
        // [1,0,0]
        twoTo8 = input.splice(input.length - 3, 3);
    } else {
        twoTo8 = input.splice(0, input.length);
    }
    
    let sum = 0;
    
    // [0,0,1]
    twoTo8.reverse();
    
    for(let i = 0; i < twoTo8.length; i++){  
        // 0 * 1, 0 * 2, 1 * 4
        let binary = twoTo8[i] * (2 ** i);
        
        sum += binary;
    }
    
    // 4
    ans.push(sum);
}

// [4,1,3] -> [3,1,4] -> "314"
console.log(ans.reverse().join(""));

이번 문제는 2진수 -> 8진수로 전환하는 방법을 알면 쉽게 만들 수 있다.
방법은 아래와 같다.

2진수 : 11001100
8진수 : 314

2진수 -> 8진수
1. 2진수를 뒤에서부터 3자리씩 끊어낸다.
11, 001, 100

2. 끊어낸 숫자에 2진법 계산을 적용한다.
11 = 1*2, 1*1 = 3
001 = 0*4, 0*2, 1*1 = 1
100 = 1*4, 0*2, 0*1 = 4

3. 이들을 조합한다.
314

필자는 계산의 편의를 위해 3개씩 끊어낸 배열을 reverse해서
2진수 숫자와 2의 i 제곱을 곱해준 값을 sum에 더하여, 총합을 구하는 것으로 구현했다.

참고 자료

참고 자료 1

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글