Programing/백준
[백준 / nodejs] 1193번 : 분수찾기
sunflo
2023. 11. 27. 00:52
1193번: 분수찾기
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
www.acmicpc.net
문제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
출력
첫째 줄에 분수를 출력한다.
풀이
이미지를 보며 알 수 있는 것들을 나열해 보겠습니다.
각 n에 해당하는 분자와 분모를 살펴봅시다.
n = 1 1/1
n = 2 1/2 2/1
n = 3 3/1 2/2 1/3
n = 4 1/4 2/3 3/2 4/1
다음의 정보를 알 수 있습니다.
- n 은 1씩 증가합니다.
- n이 짝수면 분자가 1부터 시작합니다. 마지막 값은 n입니다.
- n이 홀수면 분모가 1부터 시작합니다. 마지막 값은 n입니다.
- 분자 + 분모 = n + 1
풀이 순서
- input이 속하는 n 번째 줄 구하기 ( n의 값 구하기)
- n번 째 줄의 최대값(max) 구하기
- n이 짝수일 때
- 분자는 1부터 n까지 증가합니다.
- 분자 = n - (max - input)
- 분모 = n + 1 - 분자 (분자 + 분모 = n + 1 의 응용)
- n이 홀수일 때
- 분모는 1부터 n까지 증가합니다.
- 분모 = n - (max - input)
- 분자 = n + 1 - 분모 (분자 + 분모 = n + 1 의 응용)
코드
let input = require("fs").readFileSync("dev/stdin").toString().trim();
let n = 0;
let max = 0;
//* n번째 줄인지, 그리고 최대값은 얼마인지 구하는 while문
while (max < Number(input)) {
n++;
max = max + n;
}
let 분자 = 0;
let 분모 = 0;
if (n % 2 === 0) { // n이 짝수일 때
분자 = n - (max - input);
분모 = n + 1 - 분자;
} else { // n이 홀수일 때
분모 = n - (max - input);
분자 = n + 1 - 분모;
}
console.log(`${분자}/${분모}`);
참고한 블로그
[백준] 1193: 분수찾기 (javascript)
Link 1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net 문제 무한히 큰 배열에 다음과 같이 분수들이 적혀있다. 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → …
codingmyoni.tistory.com