유물/└ 백준
<백준(node.js)> 1193번: 분수찾기
디벅잉
2022. 2. 15. 17:14
728x90
🤖
문제
https://www.acmicpc.net/problem/1193
1193번: 분수찾기
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
www.acmicpc.net
풀이
const filePath = process.platform === "linux" ? "/dev/stdin" : "../input.txt";
const ORDER_NUMBER = +require("fs").readFileSync(filePath).toString().trim();
function findFraction(number) {
let numerator;
let denominator;
let total = 1;
let sum;
for (let i = 1; ; i++) {
if (total >= number) {
sum = i + 1;
for (let j = 1; j < sum; j++) {
if (number - (total - i) === j) {
numerator = i % 2 ? sum - j : j;
denominator = i % 2 ? j : sum - j;
return `${numerator}/${denominator}`;
}
}
} else {
total = total + i + 1;
}
}
}
console.log(findFraction(ORDER_NUMBER));
1. (line 4~26) 분수를 찾는 함수를 정의합니다.
2. (line 11~25) 분자와 분모의 합이 같은 갯수는 1, 2, 3, 4와 같이 증가합니다. 합이 2인 경우 1개(1/1), 합이 3인경우 2개(1/2, 2/1)와 같은 식입니다. 따라서 전체 합계(total)는 1, 3, 6, 10과 같이 증가하는 특징이 있습니다. 주어진 숫자가 가지는 분자와 분모의 합을 전체 합계와의 비교를 통해 찾을 수 있습니다.
3. (line 15~21) 찾아야할 분수가 분자와 분모의 합(sum)이 같은 집합에서 몇번째 분수인지를 확인하여 분자/분모 결과를 반환합니다.
728x90