너비우선탐색 7

[baekjoon] 백준 2206번 : 벽 부수고 이동하기 (by python 파이썬) bfs

https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 정답 code #벽부스고 이동하기 from collections import deque dx = [0,0,1,-1] dy = [1,-1,0,0] def bfs(x,y,z): queue = deque() queue.append((x,y,z)) while queue: a,b,c = queue.popleft() #끝에 도달한경우 결과값 반환 if a == n-1 and b ==..

[baekjoon] 백준 10026번 : 적록색약 (by python) bfs dfs

https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 정답 code -bfs활용 #적록색약 from collections import deque import sys input = sys.stdin.readline dx = [-1,1,0,0] dy = [0,0,-1,1] def bfs(x,y): q.append([x,y]) visit[x][y] = cnt while q: x, y = q.popleft() for i in range(4): nx ..

[baekjoon] 백준 7569번 : 토마토 (by python) bfs 너비우선 탐색

https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 정답 code #토마토 from collections import deque import sys input = sys.stdin.readline dx = [-1,1,0,0,0,0] dy = [0,0,-1,1,0,0] dz = [0,0,0,0,-1,1] queue = deque() m , n , h = map(int,input().split()) box = [] for i i..

[baekjoon] 백준 11724번 : 연결 요소의 개수 (by python) dfs,bfs

https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 정답 code -DFS풀이 #연결 요소의 개수 import sys sys.setrecursionlimit(5000) input = sys.stdin.readline #dfs풀이 def dfs(x): visited[x] = True for i in c[x]: if not visited[i]: dfs(i) n, m = map(int,inp..

[baekjoon] 백준 7576번 : 토마토 (by python) with 너비 우선 탐색 bfs

https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 정답 code #토마토 import sys from collections import deque input = sys.stdin.readline dx = [-1,1,0,0] dy = [0, 0 , -1, 1] def bfs(): while queue: x, y = queue.popleft() for i in range(4): nx = x + dx[i] ny = y + dy[i] i..

[baekjoon] 백준 2606번 : 바이러스 (by python 파이썬) bfs dfs 두가지 풀이

https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 정답 code -dfs 활용 #dfs이용 def dfs(com, x): global cnt visited[x] = True for i in com[x]: if visited[i] == False: dfs(com,i) cnt += 1 return True n = int(input()) c = int(input()) cnt = 0 com = [[] for _ in range(n+1)] for _ in ra..

[baekjoon] 백준 1697번 : 숨박꼭질 (by python 파이썬) with bfs

https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 정답 code from collections import deque def bfs(): queue = deque() queue.append(n) while queue: x = queue.popleft() if x == k: #원하는 값일경우 출력후 탈출 print(distance[x]) break for i in (x-1,x+1,2*x): #3가지 옵션 탐색 if 0