공부 자료/알고리즘

(Python/파이썬) 백준 1193번 - 분수찾기

뚜루뚜루세니 2021. 8. 1. 00:23
728x90

문제출처: https://www.acmicpc.net/problem/1193

 

1193번: 분수찾기

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

www.acmicpc.net

 

1. 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
x= int(input())
 
line =0
last_indx =0
 
while x > last_indx:
 
    line+=1  #line=1,2,3,4,...
    last_indx += line
 
gap = last_indx-x
 
if line%2 == 0#짝수라인이면
    ja = line-gap
    mo = gap+1
 
else#홀수라인이면
    ja = gap+1
    mo = line-gap
 
print("%d/%d"%(ja,mo))
cs

2. 해결방법

1번라인은 분수 1개

2번라인은 분수 2개

3번라인은 분수 3개 ... 이런식으로 늘어난다.

짝수라인의 경우 분자 증가, 분모 감소 & 홀수라인의 경우에는 분자 감소, 분모 증가 한다..

현재 내가 구하고자 하는 수가 몇번째 라인에 존재하는지, 몇번째 인덱스에 존재하는 알면 된다.

그 라인의 마지막 인덱스는 (1,3,6...)으로 last_indx라고 설정하였다. 

x가 마지막 인덱스보다 크다면 라인은 1씩 증가하고, 마지막 인덱스는 그 라인만큼 수를 더해주면 된다.

gap은 마지막 인덱스와 입력받은 수와의 차이를 표시해서 마지막 인덱스에서 몇번째에 떨어져 있는지를 표시해준다.

짝수라인이라면 분자는 line에서 gap만큼 빼준 값이고, 분모는 1에서 gap만큼 더한 값이다. 홀수라인이면 그것과 반대이다.

이제 출력을 해주면 된다.

 

3. 느낀점

규칙을 찾는 것이 생각보다 너무 어려웠다. gap을 표시해서 마지막 인덱스에 빼주는 것이 우여곡절 끝에 규칙을 알아내서 풀 수 있었다... 어려워잉

728x90