본문 바로가기
Develop/백준 (Cpp)

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

by Tarra 2023. 2. 20.

10984번: 내 학점을 구해줘


문제 )

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

 

이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

 

입력 :

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

 

 

 

출력 :

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

 

 

 

 

 

풀이)

 

이 방법은 브루트포스 방법으로 푼 것으로, 만약 X의 크기가 매우 커진다면 시간 초과가 날 것이라 생각한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
 
using namespace std;
 
int main()
{
    int x;
    cin >> x;
 
    int a = 1, b = 1, count = 1;
    bool flag = 0;
 
    while (1)
    {
        if (count == x) break;
 
        // 상단 벽에 도달했을 때
        if (a == 1 && flag == 0)
        {
            b++;
            count++;
            flag = 1;
            continue;
        }
        // 왼쪽 벽에 도달했을 때
        if (b == 1 && flag == 1)
        {
            a++;
            count++;
            flag = 0;
            continue;
        }
 
        // 좌하단 방향
        if (flag)
        {
            a++;
            b--;
            count++;
            continue;
        } 
        // 우상향 방향
        else
        {
            a--;
            b++;
            count++;
            continue;
        }
 
 
    }
 
    cout << a << "/" << b;
    return 0;
}
 
cs

 


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

 

1193번: 분수찾기

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

www.acmicpc.net