[#48][알고리즘] 분수찾기

백준 > 분수찾기

문제 링크(https://www.acmicpc.net/problem/1193)

문제

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
1/11/21/31/41/5
2/12/22/32/4
3/13/23/3
4/14/2
5/1
이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 분수를 출력한다.

예제 입력 1 

14

예제 출력 1 

2/4
C++풀이
#include <iostream>
using namespace std;
int main() {
    int number, t1, t2, i;
    cin >> number;
    for (i = 1;; i++) {
        if (number -i  <= 0) {
            i % 2 == 1 ? t1 = i - number + 1 : t1 = number;
            i % 2 == 1 ? t2 = number : t2 = i - number + 1;
            break;
        }
        number -= i;
    }
    cout << t1 << "/" << t2 << endl;
    
    return 0;
}
cs

입력 = 9일 때

t2의 최대값을 구하는 과정
i = 1 부터 i++

i=1 : 9 - 1 > 0
i=2 : 8 - 2 > 0
i=3 : 6 - 3 > 0
i=4 : 3 - 4 <= 0
number = 3, i = 4 => t2는 최대 4이다.

t2가 짝수/홀수에 따라 시작 순서가 달라짐
(t2가 짝수)
t1 = number = 3
t2 = i - number + 1 = 4 - 3 + 1 = 2





-------------------------------------------------------------------------------------------------
입력 = 4일 때
t2의 최대값 구하는 과정
i = 1 부터 i++

i = 1 : 4 - 1 > 0
i = 2 : 3 - 2 > 0
i = 3 : 1 - 3 <= 0
number = 1, i = 3 => t2는 최대 3이다.
(t2가 홀수)
t1 = i - number + 1 = 4
t2 = number = 1

댓글

가장 많이 본 글