STUDY_SEONMIN

1193. 분수찾기 본문

STUDY/Baekjoon Algorithm

1193. 분수찾기

Kululu_ 2021. 7. 7. 11:57

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

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

이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

 

 

X = int(input())
n = 1

while X > (n*(n+1)/2):
    n += 1
    
d = int(n*(n+1)/2) - X

if n % 2 == 0:
    print('{}/{}'.format(n-d,1+d))
else:
    print('{}/{}'.format(1+d,n-d))

 

  • 우선 나열된 분수들을 보면 대각선을 하나의 줄이라고 생각했을 때 같은 줄에 있는 분수끼리는 분모 분자의 합이 동일합니다. 이 점에 착안해서 다음과 같은 순서로 진행했습니다.
    1. 입력된 숫자가 몇 번째 줄에 있는 숫자인지 알아냅니다.
    2. 짝수 줄/홀수 줄이냐에 따라 가장 마지막 값이 n/1 인지, 1/n인지가 결정되므로 케이스를 나눠줍니다.
    3. 알아낸 줄의 가장 마지막 번째 값을 기준으로 입력된 숫자와 몇 번의 차이가 나는지를 계산해 최종 답을 구해줍니다.

  • 1번
    우선 각 줄의 마지막 번째는 각각 1, 3, 6, 10, 15 와 같은 수열로 구성할 수 있습니다. 이를 일반화 시키면 n번째 줄의 마지막 번째는 $\frac{n(n+1)}{2}$ 가 됩니다.
    입력값 X가 $frac{n(n+1)}{2}$ 보다 작거나 같을 경우 X는 n번째 줄에 있다는 의미이므로 while문을 이용해 n을 구해주었습니다.

  • 2번
    if, else 문을 이용해 각각의 케이스를 나누어 주었습니다.

  • 3번
    짝수일 때는 n/1를 홀수일 때는 1/n를 기준으로 하여 입력된 X번째까지와의 차이를 통해 최종 답을 구했습니다.

'STUDY > Baekjoon Algorithm' 카테고리의 다른 글

10250. ACM 호텔  (0) 2021.07.08
2869. 달팽이는 올라가고 싶다  (0) 2021.07.07
2292. 벌집  (0) 2021.07.07
1712. 손익분기점  (0) 2021.07.07
1316. 그룹 단어 체커  (0) 2021.07.06
Comments