on
분수찾기 (1193번) [node.js, JavaScript]
분수찾기 (1193번) [node.js, JavaScript]
분수찾기 (1193번) [node.js, JavaScript]
문제 설명
이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
출력
첫째 줄에 분수를 출력한다.
문제설명
나열된 분수들을 지그재그 순서대로 정렬해보면 1단계에서 1/1, 2단계 1/2, 2/1, 3단계 3/1, 2/2, 1/3가 됩니다. 만약 11번째 분수를 찾고자한다면, 1단계에서 분수 1개, 2단계 분수 2개, 3단계 3개, 그다음 4개, 5단계 분수 5개입니다. 4단계까지 분수의 모든 개수는 10입니다. 그렇다면 11번째 분수는 5단계의 1번째 분수를 뜻하는걸 알 수 있습니다. 여기서 중요한 것은 단계의 숫자가 홀수라면 정순이되고, 짝수라면 역순이 되기때문에 홀수짝수를 구분해서 출력해야합니다.
의사코드
number에는 x번째의 분수를 구하고자할때 x 값을 저장합니다. value 값에는 단계의 숫자를 저장합니다. (Ex:1단계,2단계,3단계...n단계) while문이 종료된 후 number에는 n단계에서 몇 번째에 있는지 알 수 있는 숫자가 들어있게 됩니다.
Code
const input = require("fs").readFileSync("/dev/stdin").toString().split("
"); solution(input); function solution(input) { let number = +input[0]; let value = 1; while (true) { number -= value; if (number <= 0) { number += value; break; } value++; } if (value % 2 === 1) { console.log(`${(value+1) - number }/${number}`); } else { console.log(`${number}/${(value+1) - number}`); } }
from http://jinblog123.tistory.com/222 by ccl(A) rewrite - 2021-11-21 23:02:03