Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 프로그래머스
- 코테
- 백준
- SWIFT
- 머신러닝
- MVVM
- 아마존 웹 서비스
- Python
- GDSC
- 현대sw
- 플러터
- 안드로이드
- 알고리즘
- 자바
- baekjoon
- VSCode
- Android
- Flutter
- 스위프트
- 개발
- kotlin
- 코틀린
- java
- aws
- 파이썬
- programers
- softeer
- 다트
- 소프티어
- DART
Archives
- Today
- Total
조준장 개발자 생존기
[baekjoon] 백준 9934번(파이썬): 완전 이진 트리 본문
문제
9934번: 완전 이진 트리
상근이는 슬로베니아의 도시 Donji Andrijevci를 여행하고 있다. 이 도시의 도로는 깊이가 K인 완전 이진 트리를 이루고 있다. 깊이가 K인 완전 이진 트리는 총 2K-1개의 노드로 이루어져 있다. (아래
www.acmicpc.net
알고리즘
- 분할 정복을 통해 문제를 수행한다.
- 문제를 보면 중위 순환을 통해 빌딩을 방문한 것을 확인할 수 있다.
- 중위 순환이고 완전 이진 트리이기 때문에 중간에 있는 노드가 루트 노드가 된다.
- 루트 노드를 찾고 왼쪽 서브 노드와 오른쪽 서브 노드를 나눠 각 트리를 재귀적으로 탐색한다.
코드
import sys
sys.setrecursionlimit(10 ** 9)
# 분할 정복
def divide(start, end, lev):
# 시작 점과 끝 점이 크로스되면 리턴
if start > end:
return
center = (start + end) // 2 # 루트 노드
level[lev].append(n[center]) # 루트 노드를 레벨의 따라 리스트에 추가
divide(start, center - 1, lev + 1) # 왼쪽 서브 트리의 루트 노드를 재귀적으로 탐색
divide(center + 1, end, lev + 1) # 오른쪽 서브 트리의 루트 노드를 재귀적으로 탐색
k = int(sys.stdin.readline())
n = list(map(int, sys.stdin.readline().split()))
level = [[] for _ in range(k)]
# 분활 탐색
divide(0, len(n) - 1, 0)
# 각 레벨의 따라 노드를 출력
for i in level:
print(*i)
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 3584번(파이썬): 가장 가까운 공통 조상 (0) | 2021.11.02 |
---|---|
[baekjoon] 백준 2263번(파이썬): 트리의 순회 (0) | 2021.11.01 |
[baekjoon] 백준 1167번(파이썬): 트리의 지름 (0) | 2021.10.30 |
[baekjoon] 백준 1967번(파이썬): 트리의 지름 (0) | 2021.10.29 |
[baekjoon] 백준 1991번(파이썬): 트리 순회 (0) | 2021.10.28 |