본문 바로가기
Problem Solving/카카오 코딩테스트

[카카오 기출] 길 찾기 게임

by ggyongi 2021. 9. 9.
반응형

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

 

코딩테스트 연습 - 길 찾기 게임

[[5,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2]] [[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]]

programmers.co.kr

class Node:
    def __init__(self, val = 0, left = None, right = None):
        self.val = val
        self.left = left
        self.right = right

import collections
import sys
sys.setrecursionlimit(10**5)
def solution(nodeinfo):
    dct= {}
    lst = []
    for i in range(len(nodeinfo)):
        lst.append(nodeinfo[i])
        dct[nodeinfo[i][0]] = i+1
    
    lst.sort(key = lambda x: (-x[1], x[0]))
    lst = collections.deque(lst)
    
    x, _ = lst.popleft()    
    root = Node(x)
    
    while lst:
        node = root
        x, _ =  lst.popleft()
        while node:
            if node.val < x:
                if node.right == None:
                    node.right = Node(x)
                    break
                else:
                    node = node.right
            else:
                if node.left == None:
                    node.left = Node(x)
                    break
                else:
                    node = node.left
       
    answer = []
    
    # preorder
    result = []
    visited = [False for x in range(len(nodeinfo))]    
    def preorder(node):
        if not node:
            return       
        result.append(dct[node.val])
        preorder(node.left)
        preorder(node.right)        
    preorder(root)
    answer.append(result)
    
    # postorder
    result = []
    visited = [False for x in range(len(nodeinfo))]    
    def postorder(node):
        if not node:
            return       
        postorder(node.left)
        postorder(node.right)        
        result.append(dct[node.val])
    postorder(root)
    answer.append(result)     
    
    return answer

뭔가 전형적인 문제?스러웠지만 시간이 오래걸렸다...

트리를 만드는 것에 아직 익숙하지 않다.

자가균형 이진트리는 재귀를 통해 만들수 있단 것을 기억하자.

 

재귀 최대 개수를 늘려주지 않으면 테케를 모두 통과할 수 없다.

프로그래머스에서 이걸 안알려주기때문에 재귀를 쓸 때는 안전하게 늘려주는 게 좋을듯

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글