https://www.acmicpc.net/problem/1193

백준 1193번: 분수찾기

#include <iostream>
using namespace std;

int main()
{
	int X, Y = 0; //입력: X
	int a = 0; // X번째 수는 Y번째 줄의 a번째 수
	int b = 0; //Y를 찾기 위해 임시로 사용하는 값
	cin >> X;

	if (X == 1) { cout << "1/1"; }
	else if (X == 2) { cout << "1/2"; }
	else if (X == 3) { cout << "2/1"; }
	else
	{
		for (int i = 3; i; i++)
		{
			b = i * (i + 1) / 2;
			if (X <= b) { Y = i; break; }
		}

		a = X - Y * (Y - 1) / 2;

		if (Y % 2 == 0)
		{
			cout << a << '/' << Y - a + 1;
		}
		else
		{
			cout << Y - a + 1 << '/' << a;
		}
	}
}

1부터 n까지의 합을 구하는 식을 이용해 Y번째 줄까지의 총 개수를 구했다.

임시값 b가 X보다 커지면 Y를 찾은 것이었는데, b와 X가 같은 경우를 고려하지 않아서 한참 헤맸다.

+ Recent posts