본문 바로가기
Data Engineering/Python

[코테] 프로그래머스 - 길 찾기 게임 Python 코드

by strongstar 2025. 10. 25.
import sys
sys.setrecursionlimit(10**6)  # 재귀 횟수 최대 100만으로 증가

def solution(nodeinfo):
    class Node:
        def __init__(self, num, x, y):
            self.num = num
            self.x = x
            self.y = y
            self.left = None
            self.right = None

    def insertNode(parent, child):
        if child.x < parent.x:
            if parent.left is None:
                parent.left = child
            else:
                insertNode(parent.left, child)
        else:
            if parent.right is None:
                parent.right = child
            else:
                insertNode(parent.right, child)

    preorderList = []   # 전위 순회
    def preorder(node):
        if node is None:
            return
        preorderList.append(node.num)
        preorder(node.left)
        preorder(node.right)
    
    postorderList = []  # 후위 순회
    def postorder(node):
        if node is None:
            return
        postorder(node.left)
        postorder(node.right)
        postorderList.append(node.num)


    nodeinfo = [[i+1, x, y] for i, [x, y] in enumerate(nodeinfo)]   # [num, x, y]
    nodeinfo.sort(key=lambda x: (-x[2], x[1]))  # order by y desc, x asc

    root = Node(*nodeinfo[0])   # 앞에 * 붙여야 num, x, y 변수로 각각 전달됨
    for node in nodeinfo[1:]:   # root 노드는 제외
        insertNode(root, Node(*node)) # 여기도 * 주의

    preorder(root)
    postorder(root)
    
    return [preorderList, postorderList]


# https://school.programmers.co.kr/learn/courses/30/lessons/42892