본문 바로가기

Queue9

[SWEA 5099번] 피자굽기 from collections import deque t = int(input()) answer = [] for _ in range(t): n, m = map(int,input().split()) cheese = list(map(int,input().split())) data = [(i+1,cheese[i]) for i in range(m)] queue = deque([]) for _ in range(n): queue.append(data.pop(0)) while queue: if len(queue) == 1: v = queue.popleft() answer.append(v[0]) break index, remain = queue.popleft() if remain // 2 != 0: queue.appe.. 2023. 9. 21.
[SWEA 5105번] 미로의 거리 from collections import deque t= int(input()) dx = [-1,1,0,0] dy = [0,0,-1,1] answer = [] for _ in range(t): n = int(input()) maze = [list(map(int,list(input()))) for _ in range(n)] visited = [[0]*n for _ in range(n)] for i in range(n): for j in range(n): if maze[i][j] == 2: start_x, start_y = i, j def bfs(x,y): visited[x][y] = -1 queue = deque([(x,y)]) while queue: cur_x, cur_y = queue.popleft(.. 2023. 9. 21.
[Tree] Queue를 이용한 레벨 순서 순회 레벨 순서 순회는 직관적이어서 쉽다. 과정을 나열하면 아래와 같다. 루트부터 방문하고, 루트의 왼쪽과 오른쪽을 방문한다. 루트 왼쪽 노드의 왼쪽과 오른쪽을 방문한다. 루트 오른쪽 노드의 왼쪽과 오른쪽을 방문한다. 즉, 현재 노드를 방문할 때 현재 노드의 왼쪽과 오른쪽 노드를 차례로 큐에 넣어 둔다. 그리고, 큐에서 순서대로 꺼내서 같은 방식으로 처리한다. 여기서는 파이썬의 리스트를 Queue로 사용한다. from collections import deque tree = ["A", "B", "C", "D", "E", "F", None, "G"] def levelorder(tree): if not tree: return queue = deque([0]) while queue: parent = queue.po.. 2023. 9. 7.