카테고리 없음

백준 - 1193 (python)

SooHw 2024. 2. 19. 14:57

 

 

처음 풀이

num = 1
cycle = -1
X = int(input())
count = 0

while True:
    j = num
    if cycle == 1:
        for i in range(0, j, +1):
            count += 1
            if count == X:
                print(f"{i + 1}/{j}")
                break
            j -= 1
        if count == X:
            break
    else:
        for i in range(0, j, +1):
            count += 1
            if count == X:
                print(f"{j}/{i + 1}")
                break
            j -= 1
        if count == X:
            break
    num += 1
    cycle *= -1

 

1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 . . .
분자와 분모가 1씩 증가하고 감소하는게 교차로 된다는 조건을 토대로 코드를 짰다.

결과는 시간초과가 떠버려서 좀더 간소하게 코드를 수정해봤다

 

X = int(input())
count = 0

for j in range(1, X + 1):
    count += j
    if count >= X:
        if (j % 2) == 0:
            print(f"{j - (count - X)}/{count - X + 1}")
        else:
            print(f"{count - X + 1}/{j - (count - X)}")
        break

 

 

while문을 없애고 필요한 만큼만 반복문을 돌리도록 코드를 짰다.

j는 줄 수 개념

1/1

2/1 1/2
3/1 2/2 1/3

 

count는 현재까지 나온 분수들의 개수의 합