개발 연습장/백준 문제풀이

[파이썬, Python] 백준 1193: 분수찾기

LooanCheong 2022. 12. 14. 19:07
반응형

문제

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

 

1193번: 분수찾기

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

www.acmicpc.net

코드

import sys
input = sys.stdin.readline

x = int(input())

line = 0
max_num = 0

while x > max_num:
    line += 1
    max_num += line
    
gap = max_num - x

if line%2 == 0:
    top = line - gap
    bot = gap + 1
else:
    top = gap + 1
    bot = line - gap
print('%d/%d'%(top,bot))

설명

홀수 라인과 짝수 라인의 규칙과 x에 따른 라인의 규칙을 찾으면 해결이 가능한 문제다.

홀수 줄은 분자가 1씩 줄어들고 분모는 1씩 늘어난다.
짝수 줄은 분자가 1씩 늘어나고 분모는 1씩 줄어든다.

x가 max_num보다 작으면 line을 1개 늘려주고,
max_num에 line을 더해주는 작업을 한다.
(1줄이 늘어나면 1씩 증가하는 누적합: 1 - 2 - 3 -...)

이후 max_num과 x의 차이를 gap이라는 함수로 두고 각 라인의 규칙에 맞게 적용시켜 준다.

짝수 줄의 경우 line에서 gap을 뺀 수가 분자가 되고,
gap에 1을 더해준 수가 분모가 된다.

홀수 줄의 경우 line에서 gap을 뺀 수가 분모가 되고,
gap에 1을 더해준 수가 분자가 된다.

이후 결과값을 출력해준다

반응형