Haribo ML, AI, MATH, Algorithm

길 찾기 게임


import sys
sys.setrecursionlimit(10**6)
class Tree:
    def __init__(self,dataList):
        self.data = max(dataList, key = lambda x :x[1]) # dataList 중 y값이 가장 큰 노드
        leftList = list(filter(lambda x :x[0] < self.data[0] , dataList)) # data를 기준으로 왼쪽 트리
        rightList = list(filter(lambda x :x[0] > self.data[0] , dataList)) # data를 기준으로 오른쪽 트리
        self.left= Tree(leftList) if leftList else None # 왼쪽 트리 재귀
        self.right=Tree(rightList) if rightList else None # 오른쪽 트리 재귀
def order(node,postList = [],preList = []):
    postList.append(node.data[-1]+1) # postorder index
    if node.left is not None:
        order(node.left,postList,preList)
    if node.right is not None:
        order(node.right,postList,preList)
    preList.append(node.data[-1]+1) # preorder index
    return [postList, preList]
def solution(nodeinfo):
    root = Tree([x+[i] for i, x in enumerate(nodeinfo)])
    return order(root)

참고 블로그


코드소개

재귀를 기가막히게 잘짠사람이 있어서 놀랐다 진심으로. 사실 그냥 눈으로 보기에도 Tree를 구성하는 단계에서 정렬에대한 낭비가 조금 있긴하지만 그런것신경 쓸 필요도 없을 정도로 더이상 코드를 줄일 수 없을 정도로 깔끔하게 잘 짰다. 사실 이 코드는 설명할 것이 없다.


Similar Posts

이전 포스트 배달

다음 포스트 매칭 점수

Comments