Base Conversion

문제

언어

  • JavaScript

순서도

  1. 주어진 숫자를 10 진법으로 변환
  2. 변환한 숫자를 B 진법으로 변환

문제 풀이 step 1

  • 정이를 위해서 A 진법으로 표현된 숫자를 B 진법으로 변환하는 프로그램을 만드는 문제입니다.
  • 우선, 주어진 숫자를 10 진법으로 변환합니다.
    • 문제에서 A 진법으로 나타낸 수를 10 진법으로 변환하였을 때의 값은 2 ^ 20 보다 작다고 했으므로, 걱정없이 그냥 변환합니다.
    • 변환하는 방법은 각 자리에 제곱수를 곱하면 간단하게 변환할 수 있습니다.
  • 그리고 변환된 수를 가지고 Number.toString() 함수를 이용해서 B 진법으로 변환합니다.
    • 변환된 수에서 10 을 넘어가는 수는 A, B, C, … 로 변환됩니다.
    • 하지만 문제에서 10 을 넘어가는 수도 그냥 10, 11, 12, … 형태의 10 진법으로 표현했으므로,
    • 그 부분에 대해서만 10 진법으로 변환해주면 됩니다.
  • 변환한 수를 출력하면 정답입니다.
  • 추가 설명은 주석으로 작성하겠습니다.

소스 코드 1

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

const solution = (input) => {
	const [a, b] = input[0].split(" ").map(Number);
	const n = Number(input[1]);
	const arr = input[2].split(" ").map(Number);

	let num = 0;
	let base = 1;
	// 10 진법 변환
	for (let i = arr.length - 1; i >= 0; i--) {
		num += arr[i] * base;
		base *= a;
	}

	// B 진법 변환
	// 이 때, (a, b, ... z) 에 대해서 10 진법으로 변환 해주기
	const str = num.toString(b).split("");
	let res = [];
	for (let i = 0; i < str.length; i++) {
		if (
			"0".charCodeAt(0) <= str[i].charCodeAt(0) &&
			str[i].charCodeAt(0) <= "9".charCodeAt(0)
		) {
			res.push(str[i]);
		} else {
			res.push(10 + str[i].charCodeAt(0) - "a".charCodeAt(0));
		}
	}

	// 출력
	return res.join(" ");
};

console.log(solution(input));