백준 2745 진법 변환 (수학)

bkboy·2022년 6월 22일
0

백준 초급

목록 보기
75/80
post-custom-banner

문제

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진법으로 출력한다.

입출력 예

풀이

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(' ');
const sol = (input) => {
  const str = input.shift().split("").reverse();
  const n = +input.shift();

  let answer = 0;
  for (let i = 0; i < str.length; i++) {
    if (str[i] >= "A" && str[i] <= "Z") {
      str[i] = str[i].charCodeAt(0) - 55;
      answer += str[i] * Math.pow(n, i);
    } else {
      str[i] = Number(str[i]);
      answer += str[i] * Math.pow(n, i);
    }
  }
  return answer;
};

console.log(sol(input));

문자열은 reverse해줘야 알맞은 자리에 넣을 수 있다.

10진법 이상의 진법에서 한자리의 10 이상의 수를 A,B,C~ 로 표현한다. A가 즉 10을 나타내는 것이다.
A의 아스키코드가 65임으로 -55를 해주면 진법을 바꿀 수 있는 것이다.

profile
음악하는 개발자
post-custom-banner

0개의 댓글