Python/백준

[백준] 1193 분수찾기 Python

황진수 2024. 6. 17. 04:21

https://www.acmicpc.net/problem/1193

 

📝  문제

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

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

 

🔎  풀이

지그재그는 다음과 같이 진행된다.

이는 짝수 번째 줄의 출력 식과 홀수 번째 줄의 출력 식이 달라야 함을 의미한다.

 

4번째 줄을 이용해 수식을 도출해보자.

 

입력받은 수를 X라고 했을 때, X가 0이 될 때까지 i에 1씩 추가하여 뺄셈을 진행한다.

 

이후 값들을 요리조리 배치하면서 표에 해당하는 분수를 만드는 수식을 도출해낸다.

 

짝수 번째 줄에서 도출된 수식은 다음과 같다 : (i + n) / (|n| + 1)

홀수 번째 줄도 같은 방식으로 수식을 도출해낸 뒤 구하면, (|n| + 1) / (i + n)이라는 식이 나오게 된다.

 

💻  코드

X = int(input())
i = 1
while X > 0:
    X -= i
    i += 1
i -= 1
if i % 2 == 0:
    print("%d/%d" % (i + X, abs(X) + 1))
else:
    print("%d/%d" % (abs(X) + 1, i + X))