문제
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
진법에대한 이해가 부족해서 더 어려웠던 문제.... 진법 변환은 다른 분들의 풀이를 참고했다.
이해하기 쉬웠던 방법은 입력받은 10진법 수를 B진법 수로 계속해서 나눴을때 나온 각각의 나머지를 나열하는 것이다.
let fs=require('fs');
let [a,b]=fs.readFileSync('/dev/stdin').toString().split(' ');
let result=[];
a=Number(a);
b=Number(b);
while(a>=b){
let reminder=a%b;
let quotient=Math.trunc(a/b);
if(reminder>=10){
result.push(String.fromCharCode(reminder+55));
}else{
result.push(reminder);
}
a=quotient;
}
//최종 남은 몫을 result array에 push 한다
if(a>=10){
result.push(String.fromCharCode(a+55));
}else{
result.push(a);
}
console.log(result.reverse().join(''));
1. a를 b보다 작아질 때까지 나누어준다
2. 나누었을때의 몫과 나머지를 각각 저장해준다. 이때 몫은 실수가 아니라 정수여야 하기때문에 Math.trunc를 해줘야 한다.
3. 나머지가 10보다 크거나 같으면 알파벳으로 바꿔줘야되기 때문에 String.fromCharCode(reminder+55)를 하고 result에 푸시한다
3-1. 나머지가 10보다 작으면 그냥 result에 푸시하면 된다.
4. 계산후 몫은 다음 계산을 위해 a로 업데이트 해준다.
5. 반복문을 빠져나오면 빠져나올때 가지고 나온 나머지를 result에 넣어주어야 한다.
6. 3번 또는 3-1번의 조건문을 실행한다.
7. 마지막으로 result를 출력해주면 되는데, 여기서 중요한것은 result를 reverse 해줘야 한다. (이유는 아래 참고 링크에 있는 그림 확인)
'Algorithm🐙 > BaekJoon' 카테고리의 다른 글
[백준] 2231번: 분해합 -JS (0) | 2024.08.20 |
---|---|
[백준] 5073번: 삼각형과 세 변 -JS (1) | 2024.08.08 |
[백준] 2563번: 색종이 -JS (0) | 2024.07.03 |
[백준] 1157번: 단어 공부 -JS (0) | 2024.07.01 |
[백준] 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 -JS (0) | 2024.06.25 |