코딩테스트 공부/node.js

(백준)2745. 진법 변환

책다니엘 2024. 1. 28. 07:42
 

문제

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)

B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.

출력

첫째 줄에 B진법 수 N을 10진법으로 출력한다.

예제 입력 1 

ZZZZZ 36

예제 출력 1 

60466175

 

풀이

 

Math.pow("수",''지수")와 Map객체의 .get()메서드를 불러와 풀어 보았다. 

 

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],
  ["A", 10],
  ["B", 11],
  ["C", 12],
  ["D", 13],
  ["E", 14],
  ["F", 15],
  ["G", 16],
  ["H", 17],
  ["I", 18],
  ["J", 19],
  ["K", 20],
  ["L", 21],
  ["M", 22],
  ["N", 23],
  ["O", 24],
  ["P", 25],
  ["Q", 26],
  ["R", 27],
  ["S", 28],
  ["T", 29],
  ["U", 30],
  ["V", 31],
  ["W", 32],
  ["X", 33],
  ["Y", 34],
  ["Z", 35],
]);

let previousNum = input[0].trim().split("");
let baseVal = Number(input[1]);
let totalNum = 0;
// 낮은 값부터 계산하기 위해 배열을 reverse
previousNum.reverse();

for (let i = 0; i < previousNum.length; i++) {
  totalNum += Number(bases.get(previousNum[i])) * Math.pow(baseVal, i);
}

console.log(totalNum);

'코딩테스트 공부 > node.js' 카테고리의 다른 글

2720. 세탁소 사장 동혁  (1) 2024.02.03
(백준)11005. 진법 변환 2  (1) 2024.02.03
(백준) 2563.색종이  (1) 2024.01.28
(백준)10798. 세로읽기  (2) 2024.01.27
(백준)2566.최댓값  (2) 2024.01.27