[백준 알고리즘] Node.js 1312. 소수

2023. 3. 27. 14:12코딩연습

1. 문제

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

 

1312번: 소수

피제수(분자) A와 제수(분모) B가 있다. 두 수를 나누었을 때, 소숫점 아래 N번째 자리수를 구하려고 한다. 예를 들어, A=3, B=4, N=1이라면, A÷B=0.75 이므로 출력 값은 7이 된다.

www.acmicpc.net

 

2. 풀이

- 문제에서 소수점 아래 n번째 수를 출력하라고 하였는데 n 은 1 부터 1,000,000까지의 숫자가 주어진다. 일반적인 경우로는 100만번째까지 나타낼 수 없기 때문에 나눗셈을 하는 방식으로 풀어야한다

ex) 입력 a = 25, b = 7, n = 5 일 경우, 출력 : 2

case 1) 1번째 나누기 : 25 % 7 = 4 → 4 * 10 = 40 → 40 / 7 = 5 

case 2) 2번째 나누기 : 40 % 7 = 5 → 5 * 10 = 50 → 50 / 7 = 7

case 3) 3번째 나누기 : 50 % 7 = 1 → 1 * 10 = 10 → 10 / 7 = 1

case 4) 4번째 나누기 : 10 % 7 = 3 → 3 * 10 = 30 → 30 / 7 = 4

case 5) 5번째 나누기 : 30 % 7 = 2 → 2 * 10 = 20 → 20 / 7 = 2

let [a,b,n] = require('fs').readFileSync('/dev/stdin').toString().trim().split(' ').map(Number);

let result = 0;
for(let i = 1; i <= n; i++){
    a = (a % b) * 10;
    result = Math.floor(a / b);
}

console.log(result)

node.js 의 경우, 일반 나누기 ( a / b ) 를 하게 되면 소수점 아래자리까지 표현하기 때문에 Math.floor를 이용하여 소수점 아래를 버린 후 계산을 진행하였다.

 

3. 정리

- 처음 접근은 입력 값을 나눈 후, 배열을 이용하여 접근하였지만 node.js가 표현할 수 있는 최대 자리수의 한계가 있다는 것을 검색을 통하여 알게 되었다.