작성
·
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인 것은 코드가 어떻게 진행되는지에 대해서는 전체 코드를 이해해야 정확히 알 수 있습니다. 해당 코드는 보다 많은 정보가 필요합니다.
더 자세한 설명을 위해서는 코드의 목적과 각 변수의 역할에 대한 이해가 필요합니다. 코드를 분석해보고자 하는 목적이 있을 경우, 해당 코드를 처음부터 한 줄씩 따라가며 변수 및 연산의 의미를 파악해 보는 것이 좋습니다. 이를 통해 코드의 동작 방식과 결과를 이해할 수 있을 것입니다.
질문이 있는 부분을 보다 구체적으로 알려주시면, 도움을 드릴 수 있을 것 같아요.