본문 바로가기
알고리즘/백준

백준 1193번 분수찾기 [C++]

by seongjun 2023. 11. 26.

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

 

1193번: 분수찾기

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

www.acmicpc.net

 

 

정해진 순서대로 분수가 변한다. 입력받은 순서의 해당하는 분수를 출력해야 한다.

#include <iostream>
#include <string>

using namespace std;

int main(){
    // 분모 먼저 +1
    // 그 후 분모 분자의 숫자가 뒤바뀔때까지 증감 반복.
    // 숫자가 뒤바뀌었다면 분자 +1
    // 위 과정 반복 후 뒤바뀌면 다시 분모 +1
    int x;
    cin >> x;
    int numerator = 1; // 분자
    int denominator = 1; // 분모
    int check = 0; // 0이면 분모 증가. 1이면 분자 증가.
    for (int i=1;i<x;i++){
        if(check == 0 && numerator == 1){
            denominator += 1;
            check = 1;
        } else if(check == 1 && denominator == 1) {
            numerator += 1;
            check = 0;
        } else{
            if (check == 0){
                numerator -= 1;
                denominator += 1;
            } else{
                numerator += 1;
                denominator -= 1;
            }
        }
    }
    cout << numerator << '/' << denominator;
}

처음에는 분모를 먼저 증가시키고, 분자와 분모의 숫자를 증감시켜 분모가 1이되면 다시 분자를 증가시키고, 다시 증감을 거쳐 분자가 1이되면 분모를 증가시키고 ...

위 과정을 반복하면 된다.

check를 통해 분자와 분모의 증감을 결정한다.