(cpp) Baekjoon 1193번 문제 ‘분수찾기’ - 수학,구현

Baekjoon 1193번 문제 ‘분수찾기’ - 수학,구현


문제

풀이

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int n;
// 1
// 2 3
// 4 5 6
// 7 8 9 10
// 11 12 13 14 15
// 16 17 18 19 20 21
// 22 23 24 25 26 27 28
// 29 30 31 32 33 34 35 36
// 37 38 39 40 41 42 43 44 45
// 46
// n이 몇 번째 라인인지
// l번째 라인: 분모+분자 =l+1
// ex 5번째 라인 : 분모 + 분자 = 6

// l=짝수인 경우
// 1/l이 시작점
// 1/2 = 2 번째 
// 1/4 = 7 번째  2+2+3
// 1/6 = 16 번째 2+2+3+4+5
// 1/8 = 29 번째 2+2+3+4+5+6+7
// 1/l = 2+ 2+3+4+...+l-1 = 2 + sum(2,l-1) 번째
// 
// l=홀수인 경우
// l/1이 시작점
// 1/1 = 1번째
// 3/1 = 4번째 1+3
// 5/1 = 11번째 1+3+7
// 7/1 = 22번째 1+3+7+11
// 9/1= 37번째 1+3+7+11+15
// l/1 = 1+3+7+11+15+19+...+2*(l-1)-1
int main() {
	cin >> n;
	int sum = 0;
	int i = 0;
	while (sum < n) {
		sum = sum + i;
		i++;
	}

	int l = i - 1;
	int start = 2;
	int start2 = 1;

	//cout << l << "\n";
	if (l == 1) {
		cout << 1 << "/" << 1;
	}
	else if (l % 2 == 0) {
		for (int i = 2; i < l; i++) {
			start = start + i;
		}
		int k = n - start;
		cout << 1 + k << "/" << l - k;
	}
	else if (l%2 !=0) {
		for (int i = 1; 4*i-1 < 2*(l-1)+1;i++) {
			start2 = start2 + (4*i-1);
		}
		int k = n - start2;
		cout << l - k << "/" << 1 + k;
	}
}