정보처리기사 실기 - 2025년 1회 파이썬 기출 풀이(집합 자료형 set의 특징과 중복 처리 문제)

Alchemist·2025년 10월 6일

정보처리기사

목록 보기
112/114

✨ 문제

class Node:
    def __init__(self, value):
        self.value = value
        self.children = []

def tree(li):
    nodes = [Node(i) for i in li]
    for i in range(1, len(li)):
        nodes[(i - 1) // 2].children.append(nodes[i])
    return nodes[0]

def calc(node, level=0):
    if node is None:
        return 0
    return (node.value if level % 2 == 1 else 0) + sum(calc(n, level + 1) for n in node.children)

li = [3, 5, 8, 12, 15, 18, 21]

root = tree(li)

print(calc(root))

🎯 출제 의도

  • 리스트로 이진 트리 구조를 구성하는 방식 이해
  • (i - 1) // 2 로 부모-자식 관계 계산 원리 파악
  • 재귀함수와 level(깊이) 활용 구조 이해
  • 짝수/홀수 레벨 조건 처리 (level % 2 == 1) 확인

📘 개념 정리

1. 트리 구조 생성

for i in range(1, len(li)):
    nodes[(i - 1) // 2].children.append(nodes[i])
  • (i - 1) // 2이진 트리의 부모 인덱스 계산 공식이다.
  • 예:
i부모 인덱스 ( (i-1)//2 )부모값자식값
1035
2038
31512
41515
52818
62821

➡ 트리 구조를 그리면 아래와 같다:

          3(level 0)
       /           \
     5(level 1)    8(level 1)
   /     \        /     \
12(2)   15(2)  18(2)   21(2)

2. calc(node, level) 함수 분석

return (node.value if level % 2 == 1 else 0) + sum(calc(n, level + 1) for n in node.children)
  • 홀수 레벨(level % 2 == 1)이면 해당 노드의 value를 더함
  • 자식 노드가 있다면 재귀적으로 다음 레벨(level+1) 탐색
  • 최종적으로 모든 노드를 돌며 홀수 레벨 노드들의 합을 계산

📝 풀이 과정

레벨(level)노드 값포함 여부 (level % 2 == 1)누적 합
030
15, 85 + 8 = 13
212, 15, 18, 21+0

따라서 최종 합은

13

✅ 최종 출력 결과

13

💡 정리

이 문제에서 꼭 알아야 할 개념:

  • 이진 트리 부모 인덱스 계산식: (i - 1) // 2
  • 홀수 레벨(level % 2 == 1) 노드만 더함
  • 재귀 구조:
    sum(calc(n, level + 1) for n in node.children) 로 하위 노드 전체 탐색
  • 트리 깊이별 구조 시각화로 로직을 쉽게 이해할 수 있음.
profile
html_programming_language

0개의 댓글