BOJ[11576] - Base Conversion by JavaScript
Base Conversion
문제
언어
- JavaScript
순서도
- 주어진 숫자를 10 진법으로 변환
- 변환한 숫자를 B 진법으로 변환
문제 풀이 step 1
- 정이를 위해서 A 진법으로 표현된 숫자를 B 진법으로 변환하는 프로그램을 만드는 문제입니다.
- 우선, 주어진 숫자를 10 진법으로 변환합니다.
- 문제에서 A 진법으로 나타낸 수를 10 진법으로 변환하였을 때의 값은
2 ^ 20보다 작다고 했으므로, 걱정없이 그냥 변환합니다. - 변환하는 방법은 각 자리에 제곱수를 곱하면 간단하게 변환할 수 있습니다.
- 문제에서 A 진법으로 나타낸 수를 10 진법으로 변환하였을 때의 값은
- 그리고 변환된 수를 가지고 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));