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

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

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

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

 

1212번: 8진수 2진수

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

www.acmicpc.net

 

문제

 

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

 

입력

 

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

 

출력

 

첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.

 

예제 입출력

 

입력 출력
314 11001100

 

풀이[node.js]

 

 

728x90

2진수 8진수와 마찬가지 방식으로 풀이하면 된다.

이번 문제는 inputs을 한개씩 잘라야 하므로 inputs.length-1을 기준으로 slice해주면 된다.

하지만, 이렇게 했을 때에, 314 중 1인 경우에, 001로 2진수 값이 나와야하는데, 1만 입력되게 된다.

이러한 오류를 제거하기 위해서, inputs의 길이가 1보다 큰 경우에는 answer에 값을 추가해줄 때 padStart를 사용하여 세자리수를 0으로 채워서 대입하게 했다. (padStart 정리 좌표는 아래에)

 

https://leylaoriduck.tistory.com/454?category=878030 

 

padStart(), padEnd() 함수 - 자바스크립트 문자열 길이 채우기 - 자바스크립트[JavaScript]

https://leylaoriduck.tistory.com/453?category=781765 [프로그래머스 스킬체크 레벨 1] [1차] 비밀지도 풀이 및 설명 - 자바스크립트[JavaScript] https://programmers.co.kr/learn/courses/30/lessons/17681 코..

leylaoriduck.tistory.com

 

무슨 말이냐면, 2진수로 변환된 값이 1로 나오게 되면, padStart를 사용하여 만약 나온 값이 세자리수가 아닐경우, 앞에서부터 '0'을 채워 세자리로 만들어주는 것이다. 그래서 결국 001이 answer로 들어가게 된다.

 

하지만, 만약 inputs의 길이가 한개라면, 여기선 3만 남은 경우에는 값이 11이 나오게 되는데, 이때는 세자리수를 맞출 필요가 없으므로 그냥 answer에 2진수로 변환한 값인 11만 넣어주면 된다.

var fs = require('fs');
var inputs = fs.readFileSync('/dev/stdin').toString().trim();
var answer = '';
while(inputs.length !== 0){
    if(inputs.length>1){
        answer = parseInt(inputs.slice(inputs.length-1), 8).toString(2).padStart(3,'0') + answer;
    }else{
        answer = parseInt(inputs.slice(inputs.length-1), 8).toString(2) + answer;
    }
    inputs = inputs.slice(0, inputs.length-1);
}
console.log(answer);
728x90

댓글