article thumbnail image
Published 2022. 9. 13. 19:49

https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do

 

SW Expert Academy

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

swexpertacademy.com

 


아이디어

  1. 처음엔 어떻게 접근해야 할지 조차 몰랐다.
  2. 답은 1부터N까지의 숫자들을 이진탐색트리로 만들면 매우 쉽게 나온다.
  3. 근데 숫자들을 보면 1, 2, 3, 4, 5, 6이 들어가 있는 위치가 중위순회를 했을 때 나오는 값이다.
  4. 위의 이진탐색트리를 중위순회하면 1, 2, 3 ,4, 5, 6이 나온다. 이걸 이용한다.
  5. 이를 트리의 값으로 저장하면 된다. 

 


풀이 및 해설

cnt = 1
def make_tree(v):
    global cnt
    if v > N:
        return
    # 왼쪽 자식의 인덱스는 현재 인덱스의 2배
    make_tree(v*2)
    # 현재 인덱스에 cnt를 저장
    tree[v] = cnt
    cnt += 1
    # 오른쪽 자식의 인덱스는 현재 인덱스의 2배 + 1
    make_tree(v*2+1)

for tc in range(int(input())):
    N = int(input())
    tree = [0] * (N+1)

    make_tree(1)
    print(f'#{tc+1} {tree[1]} {tree[N//2]}')
    cnt = 1

'SWEA' 카테고리의 다른 글

SWEA 5178 노드의 합 (파이썬)  (0) 2022.09.15
SWEA 1232 사칙연산 (파이썬)  (0) 2022.09.15
SWEA 5174 subtree (파이썬)  (0) 2022.09.13
SWEA 1289 원재의 메모리 복구하기 (파이썬)  (0) 2022.08.28
SWEA 1220 Magnetic (파이썬)  (0) 2022.08.25
복사했습니다!