1193번

김범주·2022년 7월 13일
0

백준 파이썬

목록 보기
12/29
post-thumbnail
X = int(input())

#구간 구하기
increase=[]
def seq4(n):
  ans = 1
  diff = 2
  cnt = 1
  while True:
    if n == cnt:
      break
    increase.append(ans)
    ans += diff
    diff += 1
    cnt += 1
seq4(X)

up = 1
down = 1
good_num = 1
diff = 1
for i in range(len(increase)):
  if X>increase[i] and X<=increase[i+1]:
    good_num = increase[i+1] - increase[i]
    diff = X-increase[i]-1

if good_num % 2 == 0:
  down = good_num
elif good_num % 2 == 1:
  up = good_num  
if down == 1:
  down += diff
  up -= diff  
elif up == 1:
  down -= diff
  up += diff
print('{}/{}'.format(up, down))      

계차수열을 구하는 함수를 만들고
분자를 up, 분모를 down으로 두었다
X의 구간을 찾아내서 구간 맨 앞의 숫자랑의 차이 -1 을 가지고 분자와 분모에서 짝수인지 홀수인지에 따라 더하고 빼서 찾도록 했다
이 방법도 예시는 잘 통과했지만 메모리 이슈로 실패...

정답

N = int(input())
A = 0
B = 0
while B < N:
    A += 1
    B += A
if A % 2 == 0: 
    bm = 1 + (B-N)
    bj = A - (B-N)
else :
    bm = A - (B-N)
    bj = 1 + (B-N) 
print('{0}/{1}'.format(bj, bm))

이 해결법은 과거의 내가 했던건데 구간을 나눠보면 구간의 첫 분수에 짝수가 있고 없고에 따라 자연수로 시작하는지 분수로 시작하는지가 달라지기 때문에 짝수여부로 분기해서 분자와 분모값을 계산해서 print하도록 되어있다

profile
개발꿈나무

0개의 댓글