Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 레디스 동시성
- 카카오
- 추천 검색 기능
- 디버깅
- 셀러리
- 프로그래머스
- 아키텍쳐 개선
- gRPC
- 쿠키
- 이분탐색
- next-stock
- 완전탐색
- 검색어 추천
- piplining
- 백준
- docker
- 크롤링
- AWS
- 결제서비스
- ai agent
- 트랜잭샨
- ipo 매매자동화
- 구현
- spring event
- langgraph
- 누적합
- jwt 표준
- JPA
- BFS
- 몽고 인덱스
Archives
- Today
- Total
코딩관계론
[프로그래머스] 길 찾기 게임 본문
반응형
아이디어 도출 방법
1. 주어진 입력에서 트리를 구성하는 방법은?
- 트리는 root node가 하나만 존재함으로 y축이 제일 높은 node가 root일 수 밖에 없다.
nodeinfo.sort(key=lambda nodeinfo:(-nodeinfo[1], nodeinfo[0]))
- root 노드를 기준으로 x 값이 root보다 작으면 왼쪽, 크다면 오른쪽으로 분리해주면 된다.
root_node = nodeinfo.pop(0)
make_tree([node for node in node_list if node[0] < root_node[0]])
make_tree([node for node in node_list if node[0] > root_node[0]])
증명
y축으로 정렬하면 아래와 같은 그림이 형성되어 질 것이다. 물론 순서는 틀릴 수 있다. 하지만 root 노드의 값보다 작은 값만을 추출한다면 빨간색 네모 박스만 걸리게 될 것이다. x의 순서는 보장할 수 없지만 y의 순서는 보장할 수 있기 때문에 해당 리스트의 첫 번째 값을 루트로 뽑아도 되는 것이다.
pre_order = []
last_order = []
def make_tree(nodeinfo):
"""현재 노드를 기준으로 하여 이진 트리를 구성한다.
현재 레밸보다 아래에 있는 노드 중에 x값이 root의 x 값보다 작은 것을 왼쪽으로 큰 부분을 오른쪽으로 보낸다.
Args:
nodeinfo (_type_): y 축을 기준으로 정렬된 node
"""
global pre_order, last_order
if not nodeinfo:
return
root_node = nodeinfo.pop(0)
node_list = nodeinfo[:]
pre_order.append(root_node[2])
make_tree([node for node in node_list if node[0] < root_node[0]])
make_tree([node for node in node_list if node[0] > root_node[0]])
last_order.append(root_node[2])
return
def solution(nodeinfo):
"""전위 순회와 후위 순회의 결과를 반환한다.
Args:
nodeinfo (_type_): 입력으로 주어진 노드
Returns:
_list_: 전위 순회와 후위 순회의 결과를 반환한다.
"""
for idx, node in enumerate(nodeinfo):
node.append(idx + 1)
nodeinfo.sort(key=lambda nodeinfo:(-nodeinfo[1], nodeinfo[0]))
make_tree(nodeinfo)
return [pre_order, last_order]
if __name__ == "__main__":
nodeinfo = [[5,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2]]
result = [[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]]
print(solution(nodeinfo))
후기
트리여서 조금 무서웠는데 생각보다 별 거 없었다. 중요한 점은 재귀탐색의 깊이를 조정해야 했는데 이러한 방식 때문에 정답률이 낮았던 것 같다.
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 카카오 편집 샵 (0) | 2022.12.19 |
---|---|
[프로그래머스] 카카오 셔틀버스 풀이 (1) | 2022.12.12 |
[프로그래머스] 무지의 먹방 라이브 (0) | 2022.11.20 |
[프로그래머스] 카드 짝 맞추기 (0) | 2022.11.13 |
[프로그래머스] 광고 삽입 (1) | 2022.11.06 |