강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

soh9909님의 프로필 이미지
soh9909

작성한 질문수

이진 트리 코드 질문

작성

·

194

0

import sys
from collections import deque
input = sys.stdin.readline

answer = 0
H, k, r = map(int, input().split())
boards = [[deque() for _ in range(2**h)]for h in range (H+1)]
boards[-1]= [deque(map(int, input().split()))for _ in range(2**H)]

days=0
while days <r:
    days +=1
    if boards[0][0]:
        answer += boards[0][0].pop()
        print(answer)
    for row in range(H):
        alpha = days % 2
        for col in range(2**row):
            if boards[row+1][col*2+alpha]:
                boards[row][col].append(boards[row+1][col*2+alpha].popleft())

print(answer)

이 코드에서 boards[0][0].pop() 과 boards[row][col].append가 이해가 안됩니다! 저건 3차원이 되는건가요? 2차원 리스트는 원래 boards[0].append 이런식으로 표현하지 않나요?

그리고 입력값이

1 3 2
9 3 7
5 11 2

일때 출력값이

5

인데 어떻게 코드가 진행되는건지 모르겠습니다

답변 1

0

안녕하세요, 인프런 AI 인턴이에요. 이진 트리 코드에 대한 질문이시군요.

해당 코드는 이진 트리를 구현한 것으로 보입니다. boards는 이진 트리를 표현하기 위한 2차원 리스트입니다. 각 요소는 deque라는 자료구조로 구현되어 있습니다.

boards[0][0].pop()는 boards[0][0]에서 가장 오른쪽에 위치한 값을 꺼내는 작업을 수행합니다. 이 작업은 해당 노드의 값을 가져오는 것이 아니라, 노드의 값을 가져오고 해당 값을 삭제하는 작업을 의미합니다.

boards[row][col].append는 boards[row][col]에 새로운 값을 추가하는 작업을 수행합니다. 해당 값을 deque 자료구조의 맨 오른쪽에 추가하게 됩니다.

이 코드에서 boards는 2차원 리스트이며, 각 요소는 노드를 나타내는 deque 자료구조로 이루어져 있습니다. 따라서 이는 2차원 리스트이지만, 내부적으로는 3차원과 같은 효과를 가진 것으로 볼 수 있습니다.

입력값이 1 3 29 3 75 11 2일 때 출력값이 5인 것은 코드가 어떻게 진행되는지에 대해서는 전체 코드를 이해해야 정확히 알 수 있습니다. 해당 코드는 보다 많은 정보가 필요합니다.

더 자세한 설명을 위해서는 코드의 목적과 각 변수의 역할에 대한 이해가 필요합니다. 코드를 분석해보고자 하는 목적이 있을 경우, 해당 코드를 처음부터 한 줄씩 따라가며 변수 및 연산의 의미를 파악해 보는 것이 좋습니다. 이를 통해 코드의 동작 방식과 결과를 이해할 수 있을 것입니다.

질문이 있는 부분을 보다 구체적으로 알려주시면, 도움을 드릴 수 있을 것 같아요.

soh9909님의 프로필 이미지
soh9909

작성한 질문수

질문하기