알고리즘/백준(BOJ)

백준 1193 분수찾기

오뚜깅 2021. 2. 2. 02:48
반응형

이 문제는 패턴을 찾고 순서에 알맞는 패턴의 값을 출력하면 된다.

 

분수는 일정한 패턴으로 분자와 분모가 변한다.

 

우선 분자와 분모의 최대값이 자연수로 정해진다.

 

1번째 분수는 1이 최대값

2~3번째 분수는 2가 최대값

4~6번째 분수는 3이 최대값

7~10번째 분수는 4가 최대값

11~15번째 분수는 5가 최대값

...

 

최대값이 짝수이고 i로 표현할 때 분수는 1/i, 2/(i - 1), ... , i/1 순서로 배정되고

최대값이 홀수일때는 분수는 i/1, (i - 1)/2, ... , 1/i 순서로 배정된다.

 

구하고자 하는 정수가 입력되면 반복문을 돌며 최대값이 몇 인 범위의 몇 번째 수인지를 구해서 분자와 분모를 구분하여 출력해주면 된다.

#include <iostream>

using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int n;
    cin >> n;

    int value = 1, order = 1;
    int i = 1;
    while(true){
        if(n - i <= 0)
            break;
        n -= i;
        order = n;
        i++;

        value = i;
    }
    
    if(value % 2 == 0)
        cout << order << "/" << value - order + 1;
    else
    {
        cout << value - order + 1 << "/" << order;
    }

    return 0;
}

 

반응형