문제
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
출력
첫째 줄에 분수를 출력한다.
풀이
대각선으로 그룹을 묶으면
분모 - 홀수 번 그룹은 커지고 짝수 번 그룹은 작아진다.
분자 - 홀수 번 그룹은 작아지고 짝수 번 그룹은 커진다.
그룹 내 숫자 개수는 1 2 3 4 5 ... 1씩 증가
총 숫자는 1 3 6 10 15 ... 순으로 증가
[짝수 그룹]
분자 = 그룹 번호 - (총 숫자 개수 - 입력된 수)
분모 = (총 숫자 개수 - 입력된 수) + 1
[홀수 그룹]
분자 = (총 숫자 개수 - 입력된 수) + 1
분모 = 그룹 번호 - (총 숫자 개수 - 입력된 수)
답안
x = int(input())
group = 0
max_num = 0 # 입력된 수 x가 있는 그룹까지 총 숫자 갯수
while x > max_num :
group += 1
max_num += group
gap = max_num - x
if group % 2 == 0 :
top = group - gap # 분자
bottom = gap + 1 # 분모
else :
top = gap + 1
bottom = group - gap
print(f'{top}/{bottom}')