본문 바로가기
알고리즘 스터디/백준 알고리즘 기초 1

[백준 11005번 진법 변환 2 - node.js] [알고리즘 기초 1/2]

by 레일라오리덕 2021. 8. 4.
728x90

https://www.acmicpc.net/problem/11005

 

11005번: 진법 변환 2

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를

www.acmicpc.net

 

문제

 

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

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

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

 

입력

 

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.

 

출력

 

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

 

예제 입출력

 

입력 출력
60466175 36 ZZZZZ

 

풀이[node.js]

 

 

728x90

들어온 number를 진법인 base로 나누었을 때의 나머지 값들을 answer에 넣어주고, tmp/base값을 tmp값으로 대입해줍니다.

tmp가 0이 되게 되면, 변환이 끝난 것이므로, 해당 변환된 값들을 answer에서 꺼내서 reverse해줍니다.

이유는 우리가 진법 변환하는 방식에서도 나온 나머지들을 나온 순서의 거꾸로 써주기 때문입니다.

그리고 answer의 길이만큼 돌면서, 알파벳으로 나온 값은 아스키코드로 변환하기 위해, 55를 더해주면 됩니다.

(진법에서 A는 10, Z는 35, 아스키코드에서 A는 65, Z는 90이기 때문)

var fs = require('fs');
var inputs = fs.readFileSync('/dev/stdin').toString().split(' ');
var number = Number(inputs[0]);
var base = Number(inputs[1]);
var answer = [];
var tmp = number;
while(tmp !== 0){
    answer.push(tmp % base);
    tmp = Math.floor(tmp/base);
}
answer = answer.reverse();
for(var i=0; i<answer.length; i++){
    if(answer[i]>=10 && answer[i]<=35){
        answer[i] = String.fromCharCode(answer[i]+55);
    }
}
console.log(answer.join('').trim());

아래는 간단한 방법입니다.

간단히 toString함수를 이용하여, 들어온 number를 base진법으로 바꿔주고, 이를 대문자로 변환해주면 됩니다.

 

var fs = require('fs');
var inputs = fs.readFileSync('/dev/stdin').toString().split(' ');
var number = Number(inputs[0]);
var base = Number(inputs[1]);
console.log(number.toString(base).toUpperCase());
728x90

댓글