문제
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
출력
첫째 줄에 10진법 수 N을 B진법으로 출력한다.
예제 입력 1
60466175 36예제 출력 1
ZZZZZ
풀이
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split(" ");
let bases = new Map([
[0, "0"],
[1, "1"],
[2, "2"],
[3, "3"],
[4, "4"],
[5, "5"],
[6, "6"],
[7, "7"],
[8, "8"],
[9, "9"],
[10, "A"],
[11, "B"],
[12, "C"],
[13, "D"],
[14, "E"],
[15, "F"],
[16, "G"],
[17, "H"],
[18, "I"],
[19, "J"],
[20, "K"],
[21, "L"],
[22, "M"],
[23, "N"],
[24, "O"],
[25, "P"],
[26, "Q"],
[27, "R"],
[28, "S"],
[29, "T"],
[30, "U"],
[31, "V"],
[32, "W"],
[33, "X"],
[34, "Y"],
[35, "Z"],
]);
let num = Number(input[0]);
let baseVal = Number(input[1]);
let i = 0;
while (Math.pow(baseVal, i) <= num) {
i++;
}
// 최대승수는 i - 1
i -= 1;
let arr = [];
for (let k = i; k >= 0; k--) {
arr.push(bases.get(Math.floor(num / Math.pow(baseVal, k))));
num = num % Math.pow(baseVal, k);
}
console.log(arr.join(""));
'코딩테스트 공부 > node.js' 카테고리의 다른 글
| 2720. 세탁소 사장 동혁 (1) | 2024.02.03 |
|---|---|
| (백준)2745. 진법 변환 (2) | 2024.01.28 |
| (백준) 2563.색종이 (1) | 2024.01.28 |
| (백준)10798. 세로읽기 (2) | 2024.01.27 |
| (백준)2566.최댓값 (2) | 2024.01.27 |