본문 바로가기

알고리즘/Python

[Python | SWEA] 11688. Calkin-Wilf tree 1

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AXgZSOn6ApIDFASW&categoryId=AXgZSOn6ApIDFASW&categoryType=CODE&problemTitle=&orderBy=PASS_RATE&selectCodeLang=PYTHON&select-1=3&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

문제

Calkin-Wilf tree는 모든 양의 유리수를 정확히 하나씩 포함하고 있는 트리다. 이 트리는 다음과 같이 정의된다
    
∙ 트리의 루트는 1/1 을 나타낸다.
    
∙ 트리의 각 노드는 왼쪽 자식과 오른쪽 자식을 가지는데 어떤 노드가 a/b 를 나타내고 있다면, 왼쪽 자식은 a/a+b 를 오른쪽 자식은 a+b/b 를 나타낸다.
루트 노드에서부터, 자식을 따라 내려간 방향이 순서대로 주어질 때, 마지막에 위치한 노드가 어떤 유리수를 나타내는지 구하는 프로그램을 작성하라.

 

제출 답안

재귀호출로 풀었다~

def calkin(a, b, nums):
    if len(nums)==0:
        return a, b
    else:
        if nums[0]=="L":
            nums.pop(0)
            return calkin(a, a+b, nums)
        elif nums[0]=="R":
            nums.pop(0)
            return calkin(a+b, b, nums)

T = int(input())
for test_case in range(1, T+1):
    nums = list(input())
    a, b = 1, 1
    a, b = calkin(a, b, nums)
    print(f"#{test_case} {a} {b}")