[#48][알고리즘] 분수찾기
백준 > 분수찾기
문제 링크(https://www.acmicpc.net/problem/1193)문제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
| 1/1 | 1/2 | 1/3 | 1/4 | 1/5 | … | 
| 2/1 | 2/2 | 2/3 | 2/4 | … | … | 
| 3/1 | 3/2 | 3/3 | … | … | … | 
| 4/1 | 4/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
| 
#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

댓글
댓글 쓰기