10984번: 내 학점을 구해줘
문제 )
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
![](https://blog.kakaocdn.net/dn/bEBgRH/btrZ6IeNQ2L/eSZa6FAHmwo5orGbaPkzx0/img.png)
이와 같이 나열된 분수들을 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
'Develop > 백준 (Cpp)' 카테고리의 다른 글
[백준] 1748번 : 수 이어 쓰기 1 (C++) (0) | 2023.02.20 |
---|---|
[백준] 1755번 : 숫자놀이 (C++) (0) | 2023.02.20 |
[백준] 1476번 : 날짜 계산 (C++) (0) | 2023.02.20 |
[백준] 2941번 : 크로아티아 알파벳 (C++) (0) | 2023.02.17 |
[백준] 11536번 : 줄 세우기 (C++) (0) | 2023.02.17 |