728x90
import sys; input = sys.stdin.readline
n = int(input())
inorder = list(map(int, input().split()))
postorder = list(map(int, input().split()))
preorder = []
def order(inorder, postorder):
if postorder == inorder:
return reversed(postorder)
ret = [postorder[-1]]
ind = inorder.index(postorder[-1])
ret += order(inorder[:ind],postorder[:ind])
ret += order(inorder[ind+1:],postorder[ind:-1])
return ret
print(*order(inorder, postorder))
처음시도했던 코드는 답은 잘 나오지만 슬라이싱을 사용하다보니 메모리가 초과했다.
import sys; input = sys.stdin.readline
sys.setrecursionlimit(100000)
n = int(input())
inorder = list(map(int, input().split()))
postorder = list(map(int, input().split()))
ind = [0] * (n + 1)
for i in range(len(inorder)):
ind[inorder[i]] = i
def order(ins=0, ine=n - 1, pos=0, poe=n - 1):
if ins > ine or pos > poe:
return
print(postorder[poe], end=' ')
# ind = inorder.index(postorder[poe])
l = ind[postorder[poe]] - ins
r = ine - ind[postorder[poe]]
order(ins, ins + l - 1, pos, pos + l - 1)
order(ine - r + 1, ine, poe - r, poe-1)
order()
인덱스로 접근해서 만들었느데 앞부분은 잘 되는데 뒷부분에서 접근이 잘 안되었다.
그래서 어찌어찌 찾아봤는데 조금만 더 생각했으면 풀수 있을뻔 했다...
크기를 찾아서 그만큼만 넣어주면 되는거였는데 참 아쉬운 문제다
항상 느끼지만 아직 많이 부족하다
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 1285 동전 뒤집기 python(pypy) (0) | 2021.05.18 |
---|---|
[백준] 17144 미세먼지 안녕! python (0) | 2021.05.18 |
[백준] 1991 트리순회 python (0) | 2021.05.09 |
[백준] 1967 트리의 지름 python (0) | 2021.05.09 |
[백준] 1918 후위 표기식 python (0) | 2021.05.09 |