https://www.acmicpc.net/problem/1991
첫 번째로 풀어봐야 할 문제부터 막혔다.
추상적인 그래프 그림을 상상 하는거야 어렵지 않지만 문제는 코드에다 이걸 반영 할 방법을 몰랐다.
깊은 생각을 해봐도 감이 안오는게 벌써 치매가 왔나 싶을정도.
전위 순회, 중위 순회, 후위 순회는 무슨 말을 하고 싶은건지 알지만 막상 그래프를 입력받은대로 만드려니 뭘 해야할지 아예 모르겠다.
그래서 그냥 시작부터 파일럿 코한테 물어보니 답을 얻었다.
참고 할만한게 알파벳 밖에 없다면 알파벳을 인덱스로 쓰는 자료구조를 쓰라고했다. DICTIONARY GOOD~
import sys
nodeCnt = int(sys.stdin.readline())
nodes = []
for i in range(nodeCnt):
command = sys.stdin.readline().strip()
parts = command.split(" ")
nodes.append([parts[0], parts[1], parts[2]])
def preorder(node):
print(node.data, end="")
if(node.left != None):
preorder(node.left)
if(node.right != None):
preorder(node.right)
def inorder(node):
if(node.left != None):
inorder(node.left)
print(node.data, end="")
if(node.right != None):
inorder(node.right)
def postorder(node):
if(node.left != None):
postorder(node.left)
if(node.right != None):
postorder(node.right)
print(node.data, end="")
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
# 트리 생성 함수
def create_tree(nodes):
node_map = {} # 노드 참조를 저장할 맵
for curNode, leftNode, rightNode in nodes:
if curNode not in node_map:
node_map[curNode] = Node(curNode) # 현재 노드 생성
if leftNode != ".":
if leftNode not in node_map:
node_map[leftNode] = Node(leftNode) # 좌측 자식 노드 생성
node_map[curNode].left = node_map[leftNode] # 연결 설정
if rightNode != ".": # 우측 자식이 있는 경우
if rightNode not in node_map:
node_map[rightNode] = Node(rightNode) # 우측 자식 노드 생성
node_map[curNode].right = node_map[rightNode] # 연결 설정
return node_map[nodes[0][0]] # 루트 노드 반환
# 트리 생성
root = create_tree(nodes)
preorder(root)
print("")
inorder(root)
print("")
postorder(root)
preorder를 복붙해서 만들면서 inorder, postorder도 같이 만들었는데,
안에 있는 preorder를 바꿔주지 않아놓고 왜 안되지 하는 참사가 있었다.
컨디션이 안좋은가.. 시야가 왜이리 좁아졌는지 모르겠다.
'문제풀이' 카테고리의 다른 글
[PY] 11724 : 연결 요소의 갯수 (Union-Find) (0) | 2025.03.29 |
---|---|
[PY] 1260 : DFS와 BFS (0) | 2025.03.28 |
[PY] <!> 하자있는 채로 풀었던 내용들 (0) | 2025.03.28 |
[PY]<!> 9935 : 문자열 폭발 (0) | 2025.03.27 |
[PY] 10815 : 숫자카드 (0) | 2025.03.27 |