Training/BOJ

[C++] 1193 분수찾기

FATKITTY 2021. 3. 9. 01:42
반응형

 

편의상 각각의 주황색 화살표를 '행'이라 칭하겠음.

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