무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은
지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
1
1/1
2
1/2
4
3/1
이 문제도 이전 벌집 문제와 비슷하게 풀었다.
이전과 동일하게 최댓값을 먼저 구해보자
1, 3, 6, 10, 15....
2, 3, 4, 5씩 늘어나는걸 알 수 있다.
그리고 원하는 분수식으로 표현하기 위해 이전 num값에서 이전 max값을 빼주면 된다.
예를들어 14라고 한다면 이전 max값 10을 빼면 4가 나온다.
그리고 나머지 하나는 count-(num-max)+1 이렇게 구하면 된다.
const input = require('fs').readFileSync('/dev/stdin').toString().trim();
const num = Number(input);
let currentMaxValue = 1;
let count = 1;
while (num > currentMaxValue) {
count++;
currentMaxValue += count;
}
currentMaxValue -= count;
if (count % 2 === 0) {
console.log(
`${num - currentMaxValue}/${count - (num - currentMaxValue) + 1}`
);
} else {
console.log(
`${count - (num - currentMaxValue) + 1}/${num - currentMaxValue}`
);
}