본문 바로가기

BFS4

[ Chapter.05 ] Part03 / 특정 거리의 도시 찾기 모든 간선의 비용이 동일할 때는 BFS를 이용해 최단 거리를 찾을 수 있습니다. from collections import deque n, m, k, x = map(int, input().split()) graph = [[] for _ in range(n+1)] for _ in range(m): a, b = map(int, input().split()) graph[a].append(b) # print(graph) # [[], [2, 3], [3, 4], [], []] check = [-1] * (n + 1) check[x] = 0 # 너비 우선 탐색(BFS) 수행 q = deque([x]) # print(q) # deque([1]) while q: now = q.popleft() # 현재 도시에서 이동할.. 2022. 7. 31.
[ Chapter.05 ] DFS / BFS 이론 그래프의 기본 구조 DFS / BFS 알고리즘에 대한 설명에 앞서, 그래프의 기본 구조 두 가지에 대해 살펴보겠습니다. 01) 인접 행렬 인접 행렬은 2차원 배열로 그래프의 연결 관계를 표현하는 방식 입니다. 연결 되어 있지 않은 노드끼리는 무한이라고 작성합니다 (INF) 모든 관계를 저장하므로 노드 개수가 많을수록 메모리가 낭비됩니다. 02) 인접 리스트 인접 리스트는 각각의 노드에 연결된 노드의 정보를 차례대로 연결하여 저장합니다. 연결된 정보만을 저장하기 때문에 메모리를 효율적으로 사용합니다. 연결된 데이터를 하나씩 확인해야 하기 때문에 정보를 얻는 속도가 느립니다. DFS Depth-First Search 깊이 우선 탐색이라고 부릅니다. 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 입니다... 2022. 7. 27.
[ BOJ ] 2667 / 단지번호붙이기 https://www.acmicpc.net/problem/2667 문제 정사각형 모양의 지도가 있습니다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타냅니다. 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려고 합니다. 연결되어있다는 것은 상하좌우로 다른 집이 있는 경우를 의미합니다. 대각선에 집이 있는 경우 연결된 것이 아닙니다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하세요. input 첫 번째 줄에는 지도의크기 n이 입력됩니다. 다음으로 n개의 행으로 이루어지도록 자료가 입력됩니다. output 첫 번째 줄에는 총 단지수를 출력합니다. 그 아래는 단지내 집의 수를 오름차순으로 정렬하여 한 줄에 하나씩 출력해줍니다. Co.. 2022. 7. 20.
[ BOJ ] 1325 / 효율적인 해킹 문제 회사를 해킹하려고 합니다. 회사는 N개의 컴퓨터로 이루어져 있습니다. 한 번의 해킹으로 여러 개의 컴퓨터를 해킹할 수 있는 컴퓨터를 해킹하려고 합니다. 컴퓨터는 신뢰하는 관계, 신뢰하지 않는 관계로 이루어져 있습니다. A가 B를 신뢰하는 경우에는 B를 해킹하면 A도 해킹할 수 있는 소리입니다 A → B 이런 상황이면 화살표를 향한 쪽의 컴퓨터를 해킹해야합니다. 이 회사의 컴퓨터의 신뢰하는 관계가 주어졌을 때, 한 번에 가장 많은 컴퓨터를 해킹할 수 있는 컴퓨터의 번호를 출력하는 프로그램을 작성하세요. Input 첫 째줄에, n과 m이 들어옵니다 둘 째줄에 m개의 줄에 신뢰하는 관계가 A B 와 같은 형식으로 들어옵니다. 이때 A B 는 A가 B를 신뢰한다는 것을 의미합니다. 컴퓨터는 1번부터 N번까.. 2022. 7. 10.