본문 바로가기

컴퓨터과학/Algorithm

[Python] [백준] 1193번 분수찾기

 

1193번: 분수찾기

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

www.acmicpc.net

문제

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

 

이와 같이 나열된 분수들을 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
14 2/4

더 많은 예제는 홈페이지 참조

코드

n = int(input())
i = 0
while n > 0:
    i += 1
    n -= i
if i % 2 == 0:
    print(f'{i+n}/{1-n}')
else:
    print(f'{1-n}/{i+n}')

 

설명

문제는 그림에서 표시한 순서를 따른다. 처음부터 지그재그 순서를 구하려 하는 것보다, 아래 그림처럼 빨간 선의 규칙을 먼저 찾는 편이 쉬울 수 있다.

 

먼저 빨간 선의 규칙인 1/i, 2/i-1, ... i/1의 형태로 알고리즘을 짜고, 짝수 번째인 경우엔 분모·분자를 뒤바꿈으로써 지그재그 효과를 주면 된다.