출처 | https://www.acmicpc.net/problem/1193
input_num = int(input())
line = 0
max_num = 0
while input_num > max_num:
line += 1
max_num += line
gap = max_num - input_num
if line % 2 == 0:
top = line - gap #문자
under = gap + 1
else:
top = gap+1
under = line - gap
print(f'{top}/{under}')
해당 블로그를 참고하여 작성했다.
input_num = int(input())
line = 0 # 사선 라인
max_num = 0 # 입력된 숫자(input_num 변수)의 라인에서 가장 큰 숫자
while input_num > max_num:
line += 1
max_num += line
gap = max_num - input_num
if line % 2 == 0: # 사선 라인이 짝수번째 일 때
top = line - gap #분자
under = gap + 1 #분모
else : # 사선 라인이 홀수번째 일 때
top = gap + 1 #분자
under = line - gap #분모
1부터 입력 받는 수까지의 정수는 사선 라인을 따라서 지그재그로 배열된다. 사선 라인이 짝수번째이면 오른쪽 끝에서 왼쪽 아래 사선 방향으로 숫자가 커지고, 사선 라인이 홀수번째이면 왼쪽 끝에서부터 오른쪽 위 사선 방향으로 숫자가 커진다.
위와 같은 정수의 배열을 이용해서 분수의 분자와 분모를 구하는 식을 작성하였다. 우선 해당 사선 라인에서 제일 큰 수에서 입력받은 수를 빼는 방법으로 gap이라는 변수를 구했다. 그리고 이 gap변수에 1을 더한 값과 line 변수에서 gap 변수를 뺀 값을 이용해서 분수의 분자와 분모를 구할 수 있다.