공부/백준(C++) - 2022~

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

상연 2022. 1. 12. 23:36

목차

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

     

    1193번: 분수찾기

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

    www.acmicpc.net

    코드

    #include <iostream>
    using namespace std;
    
    int main(){
      int n;
      cin >> n;
    
      int i = 1;
      while(n - i > 0){
        n -= i;
        i++;
      }
    
      if(i%2){
        cout << i - (n - 1) << "/" << n;
      }
      else{
        cout << n << "/" << i - (n - 1);
    
      }
    
    }

     

    풀이

    규칙을 찾는것이 항상 중요하다.

    주어진 문제를 이렇게 대각선으로 잘라서 보자

    첫 번째 줄에는 1/1 1개가 있고

    두 번째 줄에는 1/2 , 2/1 2개가 있다.

    세 번째, 네 번째 줄에는 당연히 3개, 4개가 있을것이다.

    그렇다면 간단하다, 5번째 분수에 대해 생각해보자.

     

    1) N 번째 줄에 위치해 있을까?

    3번째 줄이다.

     

    2) 그 줄에서 M 번째에 위치해 있을까?

    2번째다.

     

    3) N이 홀수인가 짝수인가?

    홀수이다.

    홀수이면 순서가 지나갈수록 분자는 1씩 감소하고 분모는 증가하므로

    (N - 1) / M => 2/2  가 답이 된다.

     

    이를 생각해서 알고리즘을 구성하면 될 것 같다.