Python

[백준/Python] 1193 : 분수찾기

여백 :: 2024. 10. 5. 15:09

 

 

 

지그재그의 순서를 문제 설명을 통해서 이해하는 것이 다소 까다로워서, 아래처럼 내가 표로 순서를 적어보았다.

 

1 2 6 7 15 16
3 5 8 14 17  
4 9 13 18    
10 12 19      
11 20        
21          

 

 

1번부터 시작해서 대각선으로 색칠하듯이 내려가는 것이 특징이다.

이를 토대로 순서를 고려하여 구분된 배열을 만들어보자면 다음과 같다.

 

1/1

1/2 2/1 

3/1 2/2 1/3

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

5/1 4/2 3/3 2/4 1/5

...

 

이제 여기서 나름대로의 규칙성을 찾아야 하는것이 중요한 과제인 것 같다.

각 줄 별로 이어지는 규칙을 찾으려니 안보여서 홀수와 짝수 번째 줄끼리의 공통점을 각각 찾아보았고, 이는 다음과 같다.

 

홀수 번째 줄 : 분자가 1씩 줄어듦 & 분모가 1씩 늘어남

짝수 번째 줄 : 분자가 1씩 늘어남 & 분모가 1씩 줄어듦 

 

각 해마다 숫자가 증가하고 있고, n 번째 줄에는 n개의 분수가 존재한다.

 

 

num = int(input())
row = 1 # 첫 번째 줄부터 시작 

while num > row : 
    num -= row
    row += 1

if row % 2 == 0:
    a = num
    b = row - num + 1
else:
    a = row - num + 1
    b = num

print(f'{a}/{b}')

 

1. while 루프

num이 현재 행에 있는 모든 분수들보다 크다면, num을 그 행에 있는 분수의 개수인 row 만큼 빼주고, 다음 줄로 넘어간다.

예를 들어 num이 7이라면, 첫 번째 행에 있는 분수(1개)를 제외하면 num=6, 두 번째 줄에 있는 분수를 제외하면 num = 4, 세 번째 줄에 있는 분수를 제외하면 num=1, 따라서 네 번째 줄에서 num=1, row=4가 된다.

 

2. if 문

num은 현재 줄에서 몇 번째 분수인지를 나타내며, 앞선 예시를 다시 가져오자면 num=1이므로 네 번째 행에서 첫 번째 분수인 것이다. 그러나 짝수 행과 홀수 행에서는 분수의 나열 방식이 다르므로 이를 충족하는 조건을 추가해야 함

 

1) 짝수 번째 행

- 분자가 1씩 늘어남 & 분모가 1씩 줄어듦 => 오른쪽으로 갈수록 분수 값이 커짐

- row - num + 1은 짝수 줄에서 분모의 값이 처음엔 row에서 시작하여 1씩 작아지는 패턴을 만듦

앞선 예시를 이어오면 현재 num=1, row=4이므로 a = 1, b = 4 - 1 + 1 = 4로서 1/4 이다.

 

2) 홀수 번째 행

- 분자가 1씩 줄어듦 & 분모가 1씩 늘어남 => 오른쪽으로 갈수록 분수 값이 작아짐

 

분수 형태로 출력하기 위해 마지막엔 {a}/{b}를 해주면 완료!