8진수

문제

언어

  • JavaScript

순서도

  1. 2 진수의 길이가 3 으로 나누어 떨어질 때 까지 수의 앞에 0 을 붙이기
  2. 3 자리씩 그룹으로 나눠서 8 진수로 바꾸기

문제 풀이 step 1

  • 2 진법의 수를 8 진법의 수로 변환하는 문제입니다.
  • 문제에서 설명한 방법 그대로 로직을 작성하면 됩니다.
  • 우선, 주어진 2 진수의 길이가 3 으로 나누어 떨어질 때 까지 수의 앞에 0 을 붙입니다.
  • 그 다음, 3 자리씩 그룹을 나누고, 문제에서 주어진 표를 참고해 8 진수로 변환합니다. 백준 2998번 2 진수를 8 진수로 바꾸는 표
  • 추가 설명은 주석으로 작성하겠습니다.

후기

  • 2 진수를 8 진수로 바꾸는 방법을 기억하고자 포스트하게 되었습니다.

소스 코드

const input = require("fs")
	.readFileSync("/dev/stdin")
	.toString()
	.trim()
	.split("\n");

// 문제에서 주어진 표를 객체 형식으로 변환
const dictionary = {
	0: "0",
	1: "1",
	10: "2",
	11: "3",
	100: "4",
	101: "5",
	110: "6",
	111: "7",
};

const solution = (input) => {
	const num = input[0].split("");

	// 2 진수의 길이가 3 으로 나누어 떨어질 때 까지 수의 앞에 0 을 붙이기
	while (true) {
		if (num.length % 3 === 0) break;
		num.unshift("0");
	}

	// 위에서 만든 표를 이용해서 8 진수로 변환하기
	let res = "";
	for (let i = 0; i < num.length; i += 3) {
		const key = num[i] + num[i + 1] + num[i + 2];
		res += dictionary[Number(key)];
	}

	return res;
};

console.log(solution(input));