유물/└ 백준

<백준(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