Algorithm/Baekjoon

[Algorithm] 백준 1193번 분수찾기 (Python)

meizzi 2023. 6. 23. 09:54
728x90
반응형

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

 

1193번: 분수찾기

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

www.acmicpc.net

문제

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

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

1

예제 출력 1

1/1

예제 입력 2

2

예제 출력 2

1/2

예제 입력 3

3

예제 출력 3

2/1

예제 입력 4

4

예제 출력 4

3/1

예제 입력 5

5

예제 출력 5

2/2

예제 입력 6

6

예제 출력 6

1/3

예제 입력 7

7

예제 출력 7

1/4

예제 입력 8

8

예제 출력 8

2/3

예제 입력 9

9

예제 출력 9

3/2

예제 입력 10

14

예제 출력 10

2/4

풀이

설명

  • 분수를 나열한 순서를 보면 대각선을 기준으로 계속 이어진다.
    • line 1 = 1/1
    • line 2 = 1/2, 2/1
    • line 3 = 3/1, 2/2, 1/3
    • line 4 = 1/4, 2/3, 3/2, 4/1
    • ...
  • X에서 line을 빼면 각 line에서의 위치를 알 수 있다.
  • line이 짝수인 경우, 분모 -1, 분자 +1을 한다.
  • line이 홀수인 경우, 분모 +1, 분자 -1을 한다.

코드

X = int(input())
line = 1

while X > line:
    X -= line
    line += 1

if line % 2 == 0:
    up = X
    down = line - X + 1
else:
    up = line - X + 1
    down = X
print(up, "/", down, sep="")
728x90
반응형