본문 바로가기
코딩테스트/백준

1312. 소수 - Node.js

by MiteDev 2024. 9. 19.

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

 

문제

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

입력

첫 번째 줄에 A와 B(1 ≤ A, B ≤ 100,000), N(1 ≤ N ≤ 1,000,000)이 공백을 경계로 주어진다.

출력

A÷B를 했을 때, 소숫점 아래 N번째 수를 출력한다.

조건 정리

나눗셈이라 딱히 할 건 없음

코드

const fs = require('fs');
const file_path = process.platform === 'linux' ? 'dev/stdin' : `${__dirname}/input.txt`
const input = fs.readFileSync(file_path).toString().trim();

/**
 * @param {string} input 
 * @returns 
 */
const solution = (input) => {
    const [a, b ,n] = input.replace(/\r/g, '').split(' ').map(el => Number(el));
    let remain = a % b;
    let result = 0;
    for(let i = 0; i < n; i++) {
        remain *= 10;
        const quotient = Math.floor(remain / b);
        remain %= b;
        result = quotient;
    }
  
    return result;
}

console.log(solution(input));

해설

처음엔 단순히 나누고 문자열로 바꾼 후에 substring을 썼는데 크기가 넘어가는지 실패가 떳었다. 그래서 생각해본게 실제로 나눗셈 할 때 쓰는 방식을 코드에 넣는게 어떨까 생각해서 그대로 적용했다.

 

소수점 중 n자리수만 구하면 되므로 A를 완벽하게 나눌 필요는 없다.

첫 번째 몫은 정수부이므로 반복문에 넣지 않고 기본값으로 정의한다.

  => 25 / 7의 몫은 3, 나머지는 4

 

n = 5이므로 

 

1. 40 / 7의 몫은 5, 나머지는 5 => 나머지에 10을 곱해준다.

2. 50 / 7의 몫은 7, 나머지는 1 => 나머지에 10을 곱해준다.

3. 10 / 7의 몫은 1, 나머지는 3 => 나머지에 10을 곱해준다.

4. 30 / 7의 몫은 4, 나머지는 2 => 나머지에 10을 곱해준다.

5. 20 / 7의 몫은 2, 나머지는 6 => 소수점 5번째 수는 20 / 7의 몫인 2이다.

'코딩테스트 > 백준' 카테고리의 다른 글

1978. 소수 찾기 - Node.js  (0) 2024.09.20
4153. 직각삼각형 - Node.js  (0) 2024.09.20
1094. 막대기 - Node.js  (0) 2024.09.15
1524. 세준세비 - Node.js  (0) 2024.09.15
1159. 농구 경기 - Node.js  (1) 2024.09.14