반응형
편의상 각각의 주황색 화살표를 '행'이라 칭하겠음.
int c와 total은 x번째 분수를 구하기 위해 총 몇 개의 행을 지나야 하는지 세기 위해,
order는 x번째 분수가 마지막 행의 몇 번째 순서의 값인지 파악하기 위한 변수이다.
total 값이 x 값보다 크거나 같아질 때까지 1, 2, 3, ... 차례대로 더해준다.
order는 x가 속한 행의 직전 행까지의 c의 합을 빼준 값을 x 에서 빼서 구해준다.
ex) x가 14면 c==5, total==15 에서 break. order는 14-(15-5) = 4가 된다.
즉 구하려는 분수가 마지막 행의 4번째 값이라는 뜻.
그 후 행이 홀수행인지 짝수행인지에 따라서 분수를 출력하는 규칙을 달리 정해준다.
#include <iostream>
using namespace std;
void Fraction(int x)
{
int c = 1, total = 1, order = 1;
while (true) {
if (total >= x) break;
c += 1;
total += c;
}
order = x - (total - c);
if (c % 2 == 1) cout << (c - order + 1) << "/" << order;
else cout << order << "/" << (c - order + 1);
}
int main()
{
int x = 1;
cin >> x;
Fraction(x);
return 0;
}
반응형
'Training > BOJ' 카테고리의 다른 글
[C++] 4673 셀프 넘버 (0) | 2022.01.07 |
---|---|
[C++] 10996 별 찍기 - 21 (0) | 2020.08.10 |
[C++] 2446 별 찍기 - 9 (0) | 2020.08.10 |
[C++] 10809 알파벳 찾기 (0) | 2020.08.10 |
[C++] 2869 달팽이는 올라가고 싶다 (0) | 2020.08.08 |