본문 바로가기

코드연습/BOJ

BOJ 1193 : 분수찾기

728x90

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

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번째 분수를 구하는 프로그램을 작성하시오.

if __name__ == '__main__':
    x = int(input())
    
    sum_n = 0

    n = 0

    while not (n-1*(n)/2 < x <= (n)*(n+1)/2) :
        n += 1


    if n % 2 == 0:
        print(f'{int(n + (x - n *(n+1) / 2))}/{int(abs(x - n *(n+1) / 2) + 1)}')
    else:
        print(f'{int(abs(x - n *(n+1) / 2) + 1)}/{int(n + (x - n *(n+1) / 2))}')

분수 찾기라고 되어 있지만, 자세히 보면 군수열(Gropuing)에 관한 문제였다. 1군 .. 2군 .. 3군 .. 순으로 순서 특징을 찾아내면 된다. 나는 먼저 해당 군을 찾고, 그  군에서 지금 X가 몇 번째 인지를 찾았다. 그리고 지그재그로 움직이기 때문에 귀찮아서 그냥 홀수, 짝수 일 때의 조건을 부여했다.

 

이걸 풀면서 갑자기 든 생각은 수학이 중요하고, 고등학교 때 배웠던 그 기억이 갑자기 새록새록 나서 다행이라는 생각을 했다. 또 고등학교 때 배우지 않았더라면 이런 아이디어를 낼 수도 없었을 것이라 생각하고, 공부하길 잘했다는 생각을 한다. 근데 이걸 인공지능이 풀 수 있을까? 규칙을 금방 찾아낼 거 같은데... 언젠가 한번 try 해봐야지..

'코드연습 > BOJ' 카테고리의 다른 글

BOJ 10250 : ACM 호텔  (0) 2022.04.11
BOJ 2869 : 달팽이는 올라가고 싶다.  (0) 2022.04.11
BOJ 2292 : 벌집  (0) 2022.04.08
BOJ 1316 : 그룹 단어 체커  (0) 2022.04.08
BOJ 2941 : 크로아티아 알파벳  (0) 2022.04.08