본문 바로가기

Algorithm/BFS, DFS33

[백준] 1600번 말이 되고픈 원숭이 아 진짜 어려웠다.. 하다하다 안되서 좀 남의 코드도 보고 유투브 영상도 보고 했는데... 아무튼... 진짜 처음 접해보는 상상도 못한.. 그런거라.. 이제는 좀 비슷한건 풀겠찌.. 그리고 Queue로 짜면 성능이 안나오고 Deque으로 가야됨 import sys from collections import deque K = int(input()) W, H = map(int, input().split()) data = [] visited = [[[0 for i in range(K + 1)] for i in range(W)] for i in range(H)] def BFS(): counter = 0 que = deque() que.append((0, 0, K)) visited[0][0][0] = 1 whil.. 2020. 9. 23.
[백준] 10451번 순열 사이클 간단한 탐색이기 때문에 DFS로 풀면 금방 한다 아주 간단한 재귀로 금방 풀 수 있는 문제 import sys N = int(input()) def DFS(i): visited[i] = True for ni in graph[i]: if visited[ni] is False: DFS(ni) for _ in range(N): counter = 0 M = int(input()) graph = [[] for _ in range(M + 1)] visited = [False] * (M + 1) data = list(map(int, sys.stdin.readline().split())) for i in range(1, len(data) + 1): graph[i].append(data[i - 1]) for i in r.. 2020. 9. 21.
[백준] 11724번 연결 요소의 개수 아... 처음에 이 코드로 풀었는데 시간초과가 떳다.. from collections import deque def BFS(): counter = 0 nodes = list(range(1, N + 1)) visited = [] que = deque() while len(nodes) != 0: que.append(nodes[0]) while que: node = que.popleft() if node in visited: continue nodes.remove(node) if node not in visited: visited.append(node) que.extend(sorted(graph[node])) counter += 1 return counter N, M = map(int, input().spli.. 2020. 9. 20.
[백준] 16953번 A → B 숨바꼭질을 풀었다면 쉽게 풀 수 있는 문제 from queue import Queue LIMIT = 1000000001 def BFS(): flag = 0 counter = 1 que = Queue() que.put([A, counter]) while not que.empty(): tx, tc = que.get() counter = tc if tx == B: flag = 1 break for nx in (tx * 2, int(str(tx)+'1')): if 0 < nx < LIMIT: que.put([nx, tc + 1]) if flag: return counter return -1 A, B = map(int, input().split()) print(BFS()) 2020. 9. 20.