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 |