문제
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 |