본문 바로가기

Algorithm

SWEA 5176 이진탐색 (python)

반응형

5176. [파이썬 S/W 문제해결 기본] 8일차 - 이진탐색 D2

문제

1부터 N까지의 자연수를 이진 탐색 트리에 저장하려고 한다.

이진 탐색 트리는 어떤 경우에도 저장된 값이 왼쪽 서브트리의 루트 <현재 노드 <오른쪽 서브 트리의 루트인 규칙을 만족한다.

추가나 삭제가 없는 경우에는, 완전 이진 트리가 되도록 만들면 효율적인 이진 탐색 트리를 만들수 있다.

다음은 1부터 6까지의 숫자를 완전 이진 트리 형태인 이진 탐색 트리에 저장한 경우이다.

img

완전 이진 트리의 노드 번호는 루트를 1번으로 하고 아래로 내려가면서 왼쪽에서 오른쪽 순으로 증가한다.

N이 주어졌을 때 완전 이진 트리로 만든 이진 탐색 트리의 루트에 저장된 값과, N/2번 노드(N이 홀수인 경우 소수점 버림)에 저장된 값을 출력하는 프로그램을 만드시오.

[입력]

첫 줄에 테스트케이스의 수 T가 주어진다. 1<=T<=50

다음 줄부터 테스트 케이스의 별로 N이 주어진다. 1<=N<=1000

[출력]

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

접근과정

조금은 어려워서 다른 코드를 참고하였다.

풀이

import sys
sys.stdin = open("input.txt")

T = int(input())


def make_tree(n):
    global number
    # 배열이니까 배열크기 넘어가지 않도록
    if n <= N:
        # 왼쪽노드는 현재 인덱스의 2배
        make_tree(n * 2)
        # 더이상 못가면 값넣기
        tree[n] = number
        # 값 넣었으면 증가시키기
        number += 1
        # 우측 노드는 인덱스 2배 + 1
        make_tree(n * 2 + 1)


for tc in range(1, T + 1):
    N = int(input())

    tree = [0 for i in range(N + 1)]
    number = 1
    make_tree(1)
    print('#{} {} {}'.format(tc, tree[1], tree[N // 2]))
반응형

'Algorithm' 카테고리의 다른 글

BOJ 20364 부동산 다툼 (python)  (0) 2021.04.13
SWEA 5174 subtree (python)  (0) 2021.04.13
SWEA 5177 이진 힙 (python)  (0) 2021.04.13
SWEA 10729 이진수 표현 (python)  (0) 2021.04.13
SWEA 5186 이진수2 (python)  (0) 2021.04.13