(cpp) Baekjoon 1193번 문제 ‘분수찾기’ - 수학,구현
on Programming Languages
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;
}
}