본문 바로가기
👩🏻‍💻 Front-end/👾 Algorithm

백준 1193 - 분수찾기 (Python)

by su-no 2022. 5. 5.

문제

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

1/1 1/2 1/3 1/4 1/5
2/1 2/2 2/3 2/4
3/1 3/2 3/3
4/1 4/2
5/1

이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 분수를 출력한다.

풀이

n = int(input())

sum = 0
i = 1
while(True):
    sum += i
    if sum >= n:
        break
    i += 1

diff = sum-n
if (i % 2 == 0):
    x = diff+1
    y = i-diff
else:
    y = diff+1
    x = i-diff

print(f"{y}/{x}")

 

이것도 벌집 문제랑 상당히 비슷했다!

(0,0)에 위치한 1/1 부터 시작해서 +2, +3, +4, +5,,, 요런식으로 숫자들이 늘어나게 되고,

1 2 6 7
3 5 8 ...
4 9 ... ...
10 ... ... ...

몇 번째 대각선인에 위치하는지를 구한다!

여기서 주의해야될 점은, 지그재그로 대각선이 그려지기 때문에 홀수번째와 짝수번째에서 숫자 증가방향이 다르다는 것.

나는 그 대각선의 최대값 (1,3,6,10,,,)를 기준으로 입력된 수가 얼마나 떨어져있는지를 diff로 정해서, 그만큼 x,y 좌표를 이동시켜 줬다.