백준 algorithm
백준 1193 - 분수찾기
cosmohoo
2021. 1. 4. 22:41
반응형


=> 단순한 규칙성을 찾는 문제입니다.
=> 처음부터 끝까지 찾아갈 경우 시간제한에 걸리는 경우가 생길 수 있습니다.
- x가 몇번째 줄에 해당하는지 찾습니다.
- 해당 줄이 짝수인지 홀수인지 판별합니다.
- 각 줄의 성질에 따라 deno(분모), nume(분자)를 구하여 print 합니다.
- 각 줄에 있는 분수는 아래의 성질을 만족합니다.
- line + 1 = 분모 + 분자
- 위의 성질을 이용하여 for문을 통한 탐색이 아닌 사칙연산으로 원하는 분수를 구할 수 있습니다.

#include <iostream>
#include <algorithm>
using namespace std;
void Print(int deno, int nume)
{
cout<<nume<<'/'<<deno<<'\n';
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int deno, nume;//분모, 분자 변수 설정
deno = 1;
nume = 1;
int x;
cin >> x;
if(x == 1) // 첫번째인 경우
{
Print(deno, nume);
}
else// 순서를 찾아야하는 경우
{
deno++; //분모 2로 설정
int line = 2; //줄 횟수
int minus =2;
while(1)
{
if(x - (minus+1) >0) //더아래로 내려갈수 있는 경우
{
x -= minus++;
line++;
}
else //줄이 해당 줄인 경우
{
break;
}
}
//cout << line ;
if(line % 2 == 0) //짝수행일때
{
deno =line - (x-2);
nume =(line+1) - deno;
Print(deno, nume);
}
else//홀수행일때
{
nume =line - (x-2);
deno = (line+1) - nume;
Print(deno, nume);
}
}
return 0;
}


반응형