알고리즘 문제풀이

Swea D2_ 11927. 이진탐색 Python Tree

아크몽 2024. 2. 23. 01:07

첫 날 풀이

def in_order(node):
    global value
    if node <= n:
        in_order(node*2) # 왼
        tree[node] = value
        value += 1
        in_order(node*2+1) # 오

t = int(input())
for tc in range(1,t+1):
    n = int(input())
    bs = []
    tree = [0] * (n+1)
    value = 1
    in_order(1)

    print(f'#{tc} {tree[1]} {tree[n//2]}')

다음 날 풀이, 동일한 코드가 짜졌다.

def maketree(node):
    global num
    # 왼 현 오
    if node <= n: # node가 n보다 작은 수 일때만
        maketree(node *2) #왼
        tree[node] = num # 현
        num += 1 # node에 들어갈 수가 1~6이기 때문
        maketree(node * 2 + 1)# 오



t = int(input())
for tc in range(1,t+1):
    n = int(input())
    # 루트 노드 : 1번 노드, 노드 != 값
    tree = [0] * (n+1) # 트리의 길이
    # print(tree)
    num = 1 # 완전트리임으로 사용
    maketree(1) # 시작 노드가 1번 노드
    print(f'#{tc} {tree[1]} {tree[n//2]}')