🐍 Python/백준

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

Data_novice 2024. 3. 26. 21:12

📌  문제

 

📌  풀이

 

머리가 아프다... 쉬운 난이도 일텐데 ㅜㅜ

우선 분모랑 분자를 따로 보고, 반복 패턴을 확인하면 각각 아래와 같다.

 

분자 : [1], [1,2], [1,2,3], [1,2,3,4] ...

분모 : [1], [2,1], [3,2,1], [4,3,2,1] ...

 

먼저 여기서 힌트를 얻기.. 각 리스트의 길이(M)와 1~M의 요소가 리스트에 들어있다는 점. 분모와 분자는 순서차이일 뿐.

 

중요한 점은 그럼 입력을 받았을 때 몇 번째 리스트에 있는 지를 보는게 포인트.

 

위 패턴과 순서도 비교해보면?

 

분자 : [1], [1,2], [3,2,1], [1,2,3,4] ...

분모 : [1], [2,1], [1,2,3], [4,3,2,1] ...

입력 패턴 : [1], [2,3], [4,5,6], [7,8,9,10] ... 

 

입력 패턴을 볼 때, 만약 입력을 9로 받았다? 리스트 길이인 값을 순서대로 뺴면..

ㄱ. 9-1 = 8

ㄴ. 8-2 = 6

ㄷ.  6-3 = 3

ㄹ. 3-4 = -1

 

그럼 5는?

ㄱ. 5-1 = 4

ㄴ. 4-2 = 2

ㄷ. 2-3 = -1

 

그럼 8은...

ㄱ. 8-1 = 7

ㄴ.7-2 = 5

ㄷ. 5-3 = 2

ㄹ. 2-4 = -2

 

어느순간 0보다 작거나 같게되고 이 때의 반복횟수가 곧 입력이 몇 번째 패턴 리스트에 속하는지를 나타낸다. 애초에 이걸 생각하는데 오래걸렸다.

 

같은 리스트에 있는 8과 9를 보면 각각 -2랑 -1이다 5는 -1이고. 그러니까 -(리스트 길이) ~ 0으로 자리를 생각하면 되겠네.

 

먼저 분자를 보면? 리스트 길이가 홀수이면 값이 점점 작아지고 짝수면 값이 점점 커진다. 이걸 if문을 이용해서

리스트 길이가 짝수면?? 뺀 값 + 리스트 길이가 분모이고, 분자는 1 - 뺀 값하면된다. 홀수의 경우 반대로

 

말이 길었는데 코드로 보면 간단하다.

N = int(input())

line = 1
while N > 0:
    N -= line
    line += 1

line -= 1
if line%2 == 0:
    print(f'{N+line}/{1 - N}')

else:
    print(f'{1-N}/{N+line}')