본문 바로가기

백준/C++

[Baekjoon/C++] 분수찾기 1193번

Baekjoon Online Judge

문제로 이동

 

문제

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

이와 같이 나열된 분수들을 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
3 2/1
4 3/1
5 2/2
6 1/3
7 1/4
8 2/3
9 3/2
14 2/4

풀이

#include<iostream>
using namespace std;

// 1/1
// 1/2, 2/1
// 3/1, 2/2, 1/3
// 1/4, 2/3, 3/2, 4/1
// 홀수 번째의 분자는 1씩 증가하고, 분모는 1씩 감소한다.
// 짝수 번째의 분모는 1씩 증가하고, 분자는 1씩 감소한다.
int main() {
	int X, num = 0;
	cin >> X;

	for (int i = 1; ; i++) {
		num += i;
		if (num >= X) {
			// 짝수 번째
			if (i % 2 == 0)
				cout << i - (num - X) << "/" << 1 + (num - X);
			// 홀수 번째
			else
				cout << 1 + (num - X) << "/" << i - (num - X);
			break;
		}
	}

	return 0;
}