안녕하세요. 박기린 입니다.
백준 11005번 진법 변환 2 문제를 풀어봅시다.
문제 링크
https://www.acmicpc.net/problem/11005
문제 해석
10진수 숫자 n을 b진수로 바꾸는 방법은 위의 계산 방식을 사용하면 됩니다.
1. n을 b으로 나눈 후, [몫과 나머지]를 구합니다.
2. 나머지는 오른쪽에 두고, 몫을 계속 n으로 나눕니다.
3. 나눗셈을 반복해서 남은 몫이 n보다 작아지면, 남은 몫과 나머지들을 순서대로 적어줍니다.
(몫부터 차례대로 적기 - 가장 맨 처음에 나온 나머지 값이 맨 뒤에 위치해야 합니다.)
10 이상 35 이하의 값의 경우, A부터 Z까지 영어를 이용해서 표기하면 됩니다.
정답 코드
const fs = require("fs");
let [n, b] = fs.readFileSync("/dev/stdin").toString().trim().split(" ");
let result = [];
n = +n;
b = +b;
while (n >= b) {
let remainder = n % b;
let quotient = Math.trunc(n / b);
if (remainder >= 10) {
result.push(String.fromCharCode(remainder + 55));
} else {
result.push(remainder);
}
n = quotient;
}
if (n >= 10) {
result.push(String.fromCharCode(n + 55));
} else {
result.push(n);
}
console.log(result.reverse().join(""));
정답 코드 풀이
const fs = require("fs");
let [n, b] = fs.readFileSync("/dev/stdin").toString().trim().split(" ");
let result = [];
n = +n;
b = +b;
fs 모듈로 입력을 받아오고, 입력으로부터 n과 b를 각각 변수로 저장합니다. n과 b는 +연산자를 이용해서 number로 타입 변환을 합니다.
result Array에는,
- n을 b로 나눈 후에 발생하는 나머지와
- 최종으로 남겨질 몫이 저장됩니다.
while (n >= b) {
let remainder = n % b;
let quotient = Math.trunc(n / b);
if (remainder >= 10) {
result.push(String.fromCharCode(remainder + 55));
} else {
result.push(remainder);
}
n = quotient;
}
while 문을 이용해서 n이 b보다 작아질 때까지 나눗셈을 실행하도록 합니다.
변수 remainder : 나머지 부분이 저장됩니다.
변수 quotient : 몫 부분이 저장됩니다.
if문을 이용해서,
나머지가 10 이상이면, String.fromCharCode(remainder + 55)를 이용해서, 영어 대문자로 변환하여 result Array에 push() 하도록 합니다.
나머지가 1 ~ 9 이면, 숫자 그대로 result Array에 push()합니다.
그리고 마지막으로, n에 quotient를 재설정합니다.
if (n >= 10) {
result.push(String.fromCharCode(n + 55));
} else {
result.push(n);
}
if 문을 이용해서, 최종으로 남은 몫을 result Array에 push()합니다.
몫도 10보다 클 경우 영어 대문자로, 아니면 숫자 그대로 push 합니다.
console.log(result.reverse().join(""));
result를 출력하기 직전에, 꼭 reverse()를 해야 합니다.
위 사진의 화살표 순으로 적혀야 되기 때문입니다.
'JS > 백준' 카테고리의 다른 글
[백준JS] 1735. 분수 합 (0) | 2023.04.16 |
---|---|
[백준JS] 2903. 중앙 이동 알고리즘 (0) | 2023.04.10 |
[백준JS] 2745. 진법 변환 (0) | 2023.04.01 |
[백준JS] 2563. 색종이 (0) | 2023.03.31 |
[백준JS] 1316. 그룹 단어 체커 (0) | 2023.03.24 |