본문 바로가기

algorithm/백준알고리즘

[백준알고리즘] 1193번: 분수찾기 -C++

728x90

[백준알고리즘] 1193번: 분수찾기 -C++

1193번: 분수찾기 (acmicpc.net)

 

1193번: 분수찾기

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

www.acmicpc.net

각 대각선 방향마다 \(step\)이라 정해주었다. 각 \(step\)에서 분자와 분모의 합은 같다.

 

짝수 \(step\)과 홀수 \(step\)이 다른 점은 짝수 \(step\)에서는 \(1/step\)에서 \(step/1\) 로 점점 분자는 1씩 증가하고 분모는 1씩 감소하게 된다. 반대로 홀수 \(step\)에서는 \(step/1\)에서 \(1/step\)로 점점 분자는 1씩 감소하고 분모는 1씩 증가하게 된다.

 

하지만 각 단계에서 \(total\)이 각 \(step\)의 마지막 값을 기준으로 구했기 때문에 \(x\)가 있는 \(step\)의 맨 뒤의 값(짝수일 경우 \(step/1\), 홀수일 경우 \(1/step\)에서 반대로 찾아주었다.

 

#include <iostream>

int main(void)
{
    int x;
    std::cin >> x;

    int total, step;
    total = step = 0;
    while (total < x)
    {
        step++;
        total += step;
    }

    int distance, dividend, divisor;
    distance = total - x;
    if (step % 2)
    {
        dividend = 1 + distance;
        divisor = step - distance;
    }
    else
    {
        dividend = step - distance;
        divisor = 1 + distance;
    }

    std::cout << dividend << "/" << divisor;
}

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90