티스토리 뷰
문제주소
programmers.co.kr/learn/courses/30/lessons/42892
내 풀이
# ✨ 파이썬 기본 재귀 limit이 1000이라 늘려주어야 한다!
import sys
sys.setrecursionlimit(10**6)
class Node:
def __init__(self, info):
self.data = info[0]
self.value = info[1]
self.left, self.right = None, None
class NodeTree:
def __init__(self, parent):
self.parent = parent
def insert(self, info):
self.cur_node = self.parent
while True:
if info[0][0] < self.cur_node.data[0]:
if self.cur_node.left != None:
self.cur_node = self.cur_node.left
else:
self.cur_node.left = Node(info)
break
else:
if self.cur_node.right != None:
self.cur_node = self.cur_node.right
else:
self.cur_node.right = Node(info)
break
def solution(nodeinfo):
answer = [[],[]]
for i in range(len(nodeinfo)):
nodeinfo[i] = (nodeinfo[i],i+1)
nodeinfo.sort(key=lambda x : -x[0][1])
head = Node(nodeinfo[0])
tree = NodeTree(head)
for i in range(1, len(nodeinfo)):
tree.insert(nodeinfo[i])
answer[0] = preorder(head, [])
answer[1] = postorder(head,[])
return answer
def preorder(node, answer):
if node == None:
return answer
answer.append(node.value)
preorder(node.left, answer)
preorder(node.right, answer)
return answer
def postorder(node, answer):
if node == None:
return answer
postorder(node.left, answer)
postorder(node.right, answer)
answer.append(node.value)
return answer
파이썬에서 재귀로 풀 땐 limit 확인하고 늘려주어야 한다!!!
다른 사람 풀이
거의 트리를 만들어서 푼 사람들이 대다수였던 것 같다.
정리
이진트리 구현은 처음해본다. 파이썬에서는 이진트리 자료구조를 사용하는 heap 같은 자료구조는 지원해주지만 이진트리 자체는 지원해주진 않아서 구현해야 한다고 한다. 인터넷에서 이진트리 구현을 찾아보면서 작성했다. 전위순회, 후위순회 등의 개념도 처음 알게 되었다. 파이썬에서 class를 처음 사용해보는데 저렇게 쓰면 되는구나 느꼈다. __init__ 이렇게 언더바가 2개 붙은 메소드명은 초기화를 담당하거나 약간 특별한 역할을 해주는 메소드들이다. 뭔가 이진트리에 대한 개념의 이해가 있으면 특별한 제약조건 없이 풀 수 있는 문제라고 느껴졌다.
카카오 문제들이 엄청 조건이 까다롭게 걸리는 문제들이 많아서 힘들었는데, 중간에 이런 문제도 나오는구나 싶었다. 역시 자료구조 공부를 해야한다!!😅 이렇게 트리라는 자료구조를 공부할 수 있어 다행이다!
'Algorithm > 문제풀이 Python' 카테고리의 다른 글
프로그래머스 레벨3 - 카카오 2019 인턴십 불량 사용자 (0) | 2021.01.23 |
---|---|
프로그래머스 레벨3 - 카카오 2020 외벽점검 (0) | 2021.01.20 |
프로그래머스 레벨3 - 카카오 2020 기둥과 보 설치 (0) | 2021.01.13 |
프로그래머스 레벨3 - 카카오 2018 추석트래픽 (0) | 2021.01.09 |
프로그래머스 레벨3 - 카카오 2020 자물쇠와 열쇠 (0) | 2021.01.06 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 네트워크
- python
- JS
- 학습로그
- 코드스쿼드
- TIL
- DB
- 운영체제
- 객체지향
- 우테코수업
- 알고리즘
- 회고
- 인증
- 글쓰기미션
- 월간회고
- 모의면접준비
- 우아한테크코스
- React
- OS
- 내부코드
- CS
- 마스터즈코스
- 개발공부일지
- javascript
- TCP/IP
- Transaction
- Spring
- JPA
- 카카오
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함