https://www.acmicpc.net/problem/9934
풀긴했는데 그닥 만족스럽지 못한 코드다. 이렇게 하는게 맞는건지...
# -*- encoding: cp949 -*- import Queue def bfs(k): q = Queue.Queue() q.put([k,k/2]) while not q.empty(): p = q.get() temp = [] flag = False for e in p[:-1]: temp.append(e-p[-1]-1) temp.append(e+p[-1]+1) if e+p[-1]-1<0 or e+p[-1]+1>len(n)-1: flag = True print n[e], print if flag: return temp.append(p[-1]/2) q.put(temp) k=input() n = map(int,raw_input().split()) bfs(2**(k-1)-1)
https://www.acmicpc.net/problem/5639
받은 인자들로 이진 트리를 만든다. 전위순회값을 주므로 루트는 제일 처음 값이다.
그 후에 만들어진 이진검색트리로 후위순해해서 보여주면 된다.
# -*- encoding: cp949 -*- def post(e): if e=='': return post(d[e][0]) post(d[e][1]) print e e = [] while True: try: e.append(input()) except EOFError: break d={e[0]:['','']} for element in e[1:]: c = e[0] while True: if element < c: if d[c][0]=='': d[c][0] = element d[element] = ['',''] break else: c = d[c][0] elif element > c: if d[c][1]=='': d[c][1] = element d[element] = ['',''] break else: c = d[c][1] post(e[0])
https://www.acmicpc.net/problem/6597
앞에 4256번이랑 똑같다. 프리오더와 인오더로 포스트오더를 구하는문제.
# -*- encoding: cp949 -*- def post(_pre, _in): global ans if not _pre: return root = _pre[0] if type(_in) is int: _in = [_in] l = _in.index(root) r = len(_pre) - 1 - l post(_pre[1:l+1], _in[:l]) post(_pre[l+1:], _in[l+1:]) ans += str(root) while True: try: _pre,_in = map(list,raw_input().split()) ans = '' post(_pre, _in) print ans except EOFError: break
'algorithm > problem solving' 카테고리의 다른 글
acmicpc.net 3878(볼록 껍질, 기하), 2254(볼록 껍질, 기하), 2166(기하) (0) | 2016.10.30 |
---|---|
acmicpc.net 12781(벡터, 기하), 1708(볼록 껍질, 기하), 9240(볼록 껍질, 기하) (0) | 2016.10.29 |
acmicpc.net 1967,1167(트리,DFS), 11725(트리,DFS), 1068(트리,DFS) (0) | 2016.10.27 |
acmicpc.net 7562(BFS), 3055(BFS), 7576,7569(BFS) (0) | 2016.10.25 |
acmicpc.net 1509,2079(DP, 팰린드롬), 13275(Manacher's Algorithm, 팰린드롬), 1990(소수,팰린드롬) (0) | 2016.10.24 |