2022/BaekJoon_알고리즘(17)
-
BFS - 맥주 마시면서 걸어가기 [ 9205번 ]
처음에는 BFS로 어떻게 생각하지... DFS로 어떻게 생각하지...했다. 요즘 머리가 잘 안돌아가는 것 같다 ㅠ.ㅠ 쨌든 편의점의 경우에는 순서 상관없이, 모든 편의점을 방문할 필요 없이 맥주 20개로 5M 씩 총 1000M(1KM) 를 가면서 목적지까지 가면 된다. 그렇기 때문에 bfs를 이용해서 편의점까지 가는데 1000M 이하면 방문하면 된다. 그리고 수시로 목적지까지 바로 갈 수 있는지 체크하면서 편의점 방문 여부를 확인하면 된다. from collections import deque def bfs(x, y): q = deque([(x, y)]) visited = [False] * n while q: x, y = q.popleft() if abs(x-ex) + abs(y-ey)
2022.07.22 -
BFS - 토마토 [ 7569번 ]
처음에 무지성으로 아래의 코드 처럼 풀었더니 시간초과가 나왔다. 그도 그럴것이 For문 파티... 그럴만했다. ㅜ.ㅜ 어쨌든 한번 길을 잘못드니 계속 헤매는 느낌이 들었다. 금같은 시간은 계속 가기만하고, 풀이는 빙글빙글 돌기만 하고 from collections import deque from copy import deepcopy M, N, H = map(int, input().split()) dx = [1, 0, 0, -1, 0, 0]; dy = [0, 1, 0, 0, -1, 0]; dz = [0, 0, 1, 0, 0, -1] graph = [] for _ in range(H): tmp = [] for _ in range(N): tmp.append(list(map(int, input().split()..
2022.07.22 -
BFS - 빙산 [ 2573번 ]
from copy import deepcopy from collections import deque # 섬 개수 타운팅 def bfs(x, y): global visited visited[x][y] = True q = deque([(x, y)]) while q: x, y = q.popleft() chk = False for i in range(4): nx = x+dx[i]; ny = y+dy[i] if 0
2022.07.20 -
BFS - 스타트링크 [5014번]
어제도 BFS 문제를 풀면서 아래 첫번째 코드 처럼 q에 [현재 층수, 움직인 횟수] 형태로 append하였더니 시간초과가 나왔다. deque로 BFS 문제를 풀때는 방문 여부를 처리하는 부분이 별개로 필요하다는 것을 다시 한번 깨닫게 하였다. F, S, G, U, D = map(int, input().split()) from collections import deque q = deque([(S, 0)]) tmp = [] if U > 0: tmp.append(U) if D > 0: tmp.append(-1 * D) chk = False while q: floor, cnt = q.popleft() if floor == G: chk = True break for a in tmp: f = floor + a i..
2022.07.18 -
BFS - 안전영역
#높이 정보가 주어졌을 때, 장마철에 물에 잠기지 않는 안전한 영역의 최대 개수를 계산하는 프로그램 from collections import deque def bfs(x, y): global h, area, areaGraph, visited dx = [0, 1, 0, -1]; dy = [1, 0, -1, 0] q = deque([(x, y)]) visited[x][y] = True areaGraph[x][y] = True chk = False while q: x, y = q.popleft() for i in range(4): nx = x + dx[i]; ny = y + dy[i] if 0
2022.07.18 -
DFS - 촌수계산 [2644번]
DFS 와 BFS로 풀이해보았다. DFS def dfs(p, cnt): global chk if p == c: chk = True print(cnt) return for i in range(101): if graph[p][i] == 1 and visited[i] == False: visited[i] = True dfs(i, cnt + 1) visited[i] = False n = int(input()) p, c = map(int, input().split()) m = int(input()) graph = [[0]*(101) for _ in range(101)] for i in range(m): x, y = map(int, input().split()) graph[x][y] = 1 graph[y][x] =..
2022.07.17