문제설명
입력 & 출력
나의 풀이
이번 문제는 앞선 진법 변환 1 포스팅에서 정리했던 문제의 반대의 문제입니다.
위와 같은 공식으로 계산을 하면 진법을 계산할 수 있습니다. 이 방법으로 계산하면 어느 진법이든 계산이 가능합니다.
문제에서는 숫자 N을 B진법으로 나눠주면 되기 때문에 이를 계산하면 다음과 같습니다.
그러면 진법 계산을 문제에 적용하면 35, 35, 35, 35, 35 가 나오게 되는데, 이를 문제에서 10진법을 넘어가는 수는 새롭게 정의한 진법으로 표시하면 됩니다.
본격적으로 "나의 풀이"를 설명하자면 먼저 입력을 map(Number)을 사용하여 N과 B를 정수형으로 받아줍니다.
N을 계속해서 몫으로 업데이트해줄 것이기 때문에 while문의 조건을 N >= B로 지정해 줍니다.
몫을 Math.floor() 메서드를 사용하여 소수점이하를 버려줍니다. 문제에서 얘기한 데로 10보다 작으면 result에 그냥 넣어줍니다.
그리고 10보다 크면 원래 아스키코드의 문자 A는 10진수로 65이고... 문자 Z는 90이기 때문에 55를 더해주어 fromCharCode() 메서드를 사용하기 위해 원래의 10진수와 맞춰줍니다.
그리고 몫(share)을 N으로 업데이트해 줍니다.
이때 주의해야 할 점이 2가지가 있습니다.
1번째
- while문이 끝나면 위 결과처럼 그림 1의 빨간색만 result에 들어가기 때문에 마지막 나머지를 생각해줘야 합니다.
2번째
- 진법 계산은 소인수분해처럼 밑에서 위로 계산하기 때문에 reverse()를 사용하여 배열을 뒤집어줘야 합니다.
1 번째 주의점을 생각하여 나머지가 10 이하면 그대로 result에 push, 10 이상이면 똑같이 fromCharCode() 메서드와 55를 더해주어 push 해줍니다.
마지막으로 2 번째 주의점을 생각하여 result배열을 reverse() 메서드를 사용하여 뒤집어주고 join() 메서드를 사용하여 문자열로 연결하여 반환해 줍니다.
다른 풀이 ✅
toString() 함수를 사용하면 위와 같이 간결하게 표현할 수 있습니다.
toString() 함수는 문자열로 바꿔주는 함수라는 게 일반적으로 사용되지만, 10진수로 만들 때도 사용할 수 있는 함수입니다.
"[값]".toString([진법]);
파라미터
- 값
- 문자로 변환할 숫자
- 진법
- 변환할 진법
참고 ❗
'Coding Test > 백준' 카테고리의 다른 글
[백준] 킹, 퀸, 룩, 비숍, 나이트, 폰 (Java, 3003번, BufferedReader) (0) | 2024.05.12 |
---|---|
[백준] 개수 세기 (Java, 10807번) (0) | 2024.05.12 |
[백준] 진법 변환 (node.js, 2745번) (0) | 2024.04.18 |
[백준] 색종이 (node.js, 2563번) (0) | 2024.04.16 |
[백준] 세로읽기 (10798번, node.js) (0) | 2024.04.16 |