본문 바로가기
DEV/알고리즘 문제 풀이

[백준][파이썬] 1193번 분수찾기

by krokerdile 2022. 1. 15.

브론즈 문제 치곤 상당히 많이 고민했던 문제입니다.

다들 어떤 식으로 고민해서 푸는지는 모르겠지만, (1/1)-(1/2,1/2)-(3/1,2/2,1/3)-... 이런식으로 계속해서 숫자가 이어져 나가고 있을 때 몇 번째의 값을 구하는지 문제에서 주면 답을 찾아 주어야 하는 문제입니다.

생각했던 과정은 

  1. 1,2,3 계속해서 1씩 늘어나는 숫자를 생각했을 때 2,3,4 순으로 분자+분모 값의 합이 나온다.
  2. 그러면 등차수열 처럼 값을 늘려서 계산해주면 되겠네
  3. 하지만 중간에 분자+분모 값이 홀수 인지 짝수인지에 따라서 분수의 순서가 달라진다.
  4. 그러면 그거는 2로 나눠서 나머지를 확인하면 되겠네
  5. 몇 번째 인지는 어떻게 생각을 해줄껀가를 고민했을 때, 저의 경우에는 (1/1)이나 (1/2,2/1) 처럼 대각선으로 한팀으로 생각했었고, 그 팀에서 몇 번째인지를 구할 수 있도록 계산 했었습니다. 
n = int(input()) #몇 번째 분수인지   
count = 1
max_n = 1
max_b = 0 
while 1:
    # print(n,max_n)
    if n <= max_n:
        # print(max_n)
        k = count+1
        n = n-max_b
        # print(k,n)
        # print(count)
        break
        
    count += 1
    max_b = max_n
    max_n += count
    
    # print(max_n)


check = 0
if k%2 == 0:
    for i in range(1,k):
        check += 1
        # print(check)
        if check == n:
            print("%d/%d" %(k-i,i)) 
if k%2 != 0:
    for i in range(1,k):
        check += 1
        # print(check)
        if check == n:
            print("%d/%d" %(i,k-i))