코딩테스트 공부/node.js

(백준)11005. 진법 변환 2

책다니엘 2024. 2. 3. 02:39

문제

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