문제 URL:
1193번: 분수찾기
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
www.acmicpc.net
다음 문제는 나열된 분수들을 지그재그 순서로 번호를 붙여
X가 주어졌을 때, X번째 분수를 구하는 프로그램이다.
이 문제에서 번호를 붙인 분수들이 지그재그 형태로 즉, 대각선을 기준으로 분수의 개수가 증가하기 때문에
문제를 풀기 위해 먼저 반복문을 통해 x번째에 해당하는 분수가 몇 번째 대각선에 존재하는지 구해주었다.
count변수에 x분수가 몇 번째 대각선에 존재하는지 저장하고 난 뒤에는
while문을 빠져나온 x변수를 이용하여 분모와 분자를 각각 구해주고 원하는 결괏값을 출력했다.
하나 주의 했어야 할 점은, 처음에 풀 때 문제를 잘못 이해해서
1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> …와 같이 진행되어야할 지그재그를
1/1 -> 1/2 -> 2/1 -> 1/3 -> 2/2 -> …로 생각하고 문제를 풀었었다.
지그재그를 통한 제대로 된 x분수를 구현하기 위해서는
if조건문을 사용하여 홀수의 경우와 짝수의 경우를 나누어 주어야한다.
+) 다음부터는 문제를 더 꼼꼼히 읽어야겠다.
#include<iostream>
using namespace std;
int main()
{
int x, count=0, n=1;
cin >> x;
while(x>0)
{
x = x-n;
count++;
n++;
}
x = x+(n-1);
int a = count-(x-1);
int b = 1+(x-1);
if(count%2==0)
cout << b << "/" << a;
else
cout << a << "/" << b;
}