문제 링크
풀이
let n = require("fs").readFileSync("/dev/stdin").toString().trim();
let oct = "";
while (n.length >= 3) {
oct = parseInt(n.slice(n.length-3), 2).toString(8) + oct;
n = n.slice(0, n.length-3);
}
console.log((n ? parseInt(n, 2).toString(8) : "") + oct);
세 자리수 2진수는 최대 7까지 나타낼 수 있어서(000~111) 2진수를 세 자리씩 끊어서 10진수로 변환하여 이어 붙이면 8진수가 된다(ex 111000111(2진수) => 707(8진수)).
문제를 처음 풀 때 아래의 방법으로 쉽게 풀릴 줄 알았으나, 문제 조건에서 주어지는 2진수의 길이가 1,000,000을 넘지 않는다고 하였으니, 10진수로 변환하였을때 엄청나게 큰 수가 나올 수 있다. 그래서 위의 방식처럼 작게 나누어서 문자열로 저장해야 한다.
console.log(parseInt(n, 2).toString(8));
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 2167] 2차원 배열의 합 with Python (0) | 2021.04.05 |
---|---|
[백준 10773] 제로 with Python (0) | 2021.04.05 |
[백준 10820] 문자열 분석 with Node.js (0) | 2021.04.03 |
[백준 2309] 일곱 난쟁이 with Node.js (0) | 2021.04.03 |
[백준 1026] 보물 with Python (0) | 2021.04.03 |