https://www.acmicpc.net/problem/1193
- 티어 : Bronze 1
- 시간 제한 : 0.5 초 (추가 시간 없음)
- 메모리 제한 : 256 MB
- 알고리즘 분류 : 수학, 구현
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
첫째 줄에 분수를 출력한다.
x = int(input())
cum_sum = 1
i = 1
flag = 0
if x == 1:
print('{}/{}'.format(1, 1))
else:
while True:
i += 1
cum_sum += i # 1 + 2 + 3 + ... 누적합 하다가
if cum_sum >= x: # 누적합이 x보다 커지면
another = 1
if i % 2 == 1: # 홀수
flag = 1
for j in range(cum_sum - x): # 누적합 - x 횟수만큼 되돌아가기
i -= 1
another += 1
if flag:
print('{}/{}'.format(another, i))
break
else:
print('{}/{}'.format(i, another))
break
메모리: 30864 KB
시간: 72 ms