백준1312 - 소수 (부동소수점) node.js 본문
반응형
https://www.acmicpc.net/problem/1312
문제는 문제 내용 말마따나 a,b,n 의 수가 주어지고, a/b 를 나눈 소수에서 소숫점 아래 n의 자리를 구하는 문제다.
문제 해결 방식
단순한 문제라 생각되지만, 부동소수점에 대한 개념이 없다면 풀이가 어렵다. 부동소수점은 컴퓨터에서 실수를 표현하는 방식 중 하나로, 소수점을 고정된 위치에 두는 것이 아니라 소수의 위치를 조절하는 방식이다.
부동소수점은 컴퓨터 입장에서 효율적으로 실수 데이터를 저장하는데에는 좋은 방식이나, 알다시피 컴퓨터는 2진법으로 동작하기 때문에, 큰 소숫점에 경우는 계산과정에서 오차가 발생하기도 한다.
간단한 예시로 0.1과 0.2를 합할 경우를 예를 들면, 부동소수점 정확성 문제로 0.30000000000000004이라는 결과가 나타난다.
(깨알 팁) 여기서 부동의 한자어는 아니 부 | 움직일 동이 아닌, '뜰' 부를 쓰는 한자어로, 영어 번역을 그대로 가져다 씀으로써, 우리 말과 딱 맞아떨어지는 말은 아니다. => 때문에 소수 표기를 float 이라고 하기도 함.
따라서 부동소수점 문제 없이 문제를 해결하는 방법은, 우리가 초등학교 때 학습했던 나누기를 활용하여 풀이하면 된다.
전체 소스 코드
const fs = require("fs");
const input = fs
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "입력.txt")
.toString()
.trim()
.split("\n");
function solution(data) {
let [a, b, c] = data[0].split(" ").map(Number);
let result = 0;
for (let i = 0; i <= c; i++) {
const rest = (a % b) * 10;
result = Math.floor(a / b);
a = rest;
}
console.log(result);
}
solution(input);
반응형
'개발 > algorithm' 카테고리의 다른 글
백준5014 - 스타트링크 (BFS) node.js (0) | 2024.01.31 |
---|---|
백준1806 - 부분합 (두 포인터) node.js (0) | 2024.01.29 |
백준1948 - 임계경로 (위상정렬 & 백트래킹) node.js (0) | 2024.01.25 |
백준2252 - 줄 세우기 (위상정렬) node.js (1) | 2024.01.23 |
백준22993 - 서든어택 3 node.js (0) | 2024.01.21 |
Comments