분수찾기

문제

언어

  • JavaScript

문제 풀이 step 1

  • 나열된 분수들은 배열에서 지그재그로 움직입니다.
  • 배열은 왼쪽 상단에서 오른쪽 하단으로 점점 범위를 넓혀가는데 그 범위는 1씩 증가합니다.
  • 즉, 1 + 2 + 3 + 4 + … 이런 식입니다.
  • 이때, 규칙을 찾을 수 있습니다.
    • 짝수일때는 위에서 아래로 내려가며, 분자가 커지고 분모는 작아집니다.
    • 홀수일때는 아래에서 위로 올라가며, 분자는 작아지고 분모는 커집니다.
  • 위 규칙을 이용해서 X가 1층인지 2층인지 … 몇 층인지 파악을 하고, 홀수인지 짝수인지 파악해서 계산해주면 됩니다.

소스 코드

const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");

const solution = (input) => {
	const N = parseInt(input[0]);
	if (N === 1) return "1/1";

	let before = 2;
	for (let i = 2; i <= 1000000; i++) {
		if (before <= N && N <= before + i - 1) {
			const step = N - before;
			if (i % 2 === 0) {
				return `${1 + step}\/${i - step}`;
			} else {
				return `${i - step}\/${1 + step}`;
			}
		}
		before += i;
	}
};

console.log(solution(input));