백준 # 1193

DaY·2021년 5월 12일
1

백준

목록 보기
3/21
post-thumbnail

1193

분수찾기

문제

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

이와 같이 나열된 분수들을 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}')

0개의 댓글