본문 바로가기
알고리즘 스터디/백준 알고리즘 기초 1

[백준 1373번 2진수 8진수 - node.js] [알고리즘 기초 1/2]

by 레일라오리덕 2021. 8. 9.
728x90

https://www.acmicpc.net/problem/1373

 

1373번: 2진수 8진수

첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.

www.acmicpc.net

 

문제

 

2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오.

 

입력

 

첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.

 

출력

 

첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.

예제 입출력

 

입력 출력
11001100 314

 

풀이[node.js]

 

 

728x90

처음에 풀었던 방식이다.

이 방식으로는 i의 값이 너무 커져, 결국 2의 i승이 너무 커져버려서 출력초과가 나는 것 같았다.

var fs = require('fs');
var inputs = fs.readFileSync('/dev/stdin').toString().split('').reverse();
var answer = [];
for(var i=0;i<inputs.length;i+=3){
    var splited = inputs.slice(i, i+3);
    var result = 0;
    for(var j=0; j<splited.length; j++){
        result += Math.pow(2,i+j) * Number(splited[j]) /Math.pow(2,i);
    }
    answer.push(result);
}
console.log(answer.reverse().join(''));

다음으로 푼 방식이다.

기존에 프로그래머스에서 풀었던 대로, parseInt와 String을 이용하여 진법변환을 해주었다.

inputs의 길이가 3보다 클 때에는 slice함수를 사용하여 가장 뒤에 있는 3글자를 추출하여 parseInt로 2진수로 변환해주고, 해당 숫자를 toString함수를 이용하여 8진수로 변환해서 answer 앞에 붙여준다. 

이렇게 되면 4가 나오고 14가 되고 314가 되는 방식으로 기존에 있는 answer값 앞에 8진수 값들을 붙여줄 수 있다.

변환을 마친 후엔 inputs의 뒤의 3글자를 제거해준다.

 

마지막으로 inputs이 남아있게 된다면, 남은 inputs을 String에서 2진수로 변환한 후, 다시 8진수로 변환하여 answer앞에 넣어서 출력해주고, inputs이 없다면 answer를 출력해준다. 

var fs = require('fs');
var inputs = fs.readFileSync('/dev/stdin').toString().trim();
var answer = '';
while(inputs.length >=3){
    answer = parseInt(inputs.slice(inputs.length-3),2).toString(8) + answer;
    inputs = inputs.slice(0, inputs.length-3);
}
console.log(inputs ? answer= parseInt(inputs,2).toString(8) + answer : answer);

 

728x90

댓글