본문 바로가기

728x90
반응형

BFS

(8)
[알고리즘] 그래프 탐색 기법을 코드로 이해하기 1. 그래프 그래프는 광범위한 분야에서 활용되고 있는 자료구조이다. 그러다보니 코딩테스트 문제 출제 1순위이다. 그래프는 정점과 간선의 집합으로 하나의 간선은 두 개의 정점을 연결한다. 그래프는 G=(V, E)로 표현하는데 간선에 방향이 있는 그래프를 방향그래프, 간선에 방향이 없는 그래프를 무방향그래프라고 한다. V = 정점의 집합, E = 간선의 집합 2. 그래프 탐색 그래프에서는 너비우선탐색(BFS)과 깊이우선탐색(DFS) 방식으로 모든 정점을 방문할 수 있다. 2.0 그래프 코드 G = { 1: set([3, 5]) 2: set([3, 4, 6]), 3: set([1, 2, 6]), 4: set([2]), 5: set([1]), 6: set([2, 3]) } 2.1 BFS BFS는 큐를 사용해 임..
[Python] 백준 12851번 문제, 숨바꼭질 2 https://www.acmicpc.net/problem/12851 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 www.acmicpc.net 수빈이가 동생과 숨바꼭질 하고 있는데 수빈이가 동생을 찾는 가장 빠른 시간이 몇 초 후이며, 가장 빠른 시간으로 찾는 방법이 몇 가지인지 구하는 문제이다. 수빈이가 X(0 ≤ X ≤ 100,000)에 있다고 가정 했을 때, 1초에 { X-1, X+1, 2X }으로 이동할 수 있다. 이렇게 몇 초후에 동생이 있는 K(0 ≤ K ≤ 100,000)에 도달하는지 구..
[Python] 백준 16173번 16174번 문제, 점프왕 쩰리 시리즈 https://www.acmicpc.net/problem/16173 16173번: 점프왕 쩰리 (Small) 쩰리는 맨 왼쪽 위의 칸에서 출발해 (행, 열)로 나타낸 좌표계로, (1, 1) -> (2, 1) -> (3, 1) -> (3, 3)으로 이동해 게임에서 승리할 수 있다. www.acmicpc.net https://www.acmicpc.net/problem/16174 이 문제는 주어진 맵 밖을 벗어나거나 -1(맨 우측 하단)에 도달하지 못하면 게임에 져서 "Hing"을 출력하고 -1에 도달하면 게임에서 승리해 "HaruHaru"를 출력한다. 세부 조건으로 시작 좌표는 맨 좌측 상단인 (0, 0)이고 움직이는 방향은 우측 또는 하단이지만, 움직일 수 있는 거리는 현재 내가 있는 칸의 숫자이다. 이런..
[Python] 백준 14502번 문제, 연구소 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 연구소 정보(0: 빈 칸, 1: 벽, 2: 바이러스)가 주어지고 벽을 세 개 세웠을 때, 바이러스가 없는 안전한 빈 칸의 갯수를 구하는 문제이다. 브루트포스 알고리즘이기 때문에 벽을 세 개 놓을 수 있는 모든 경우를 돌며 BFS를 통해 바이러스를 전파시킨 다음에 전파가 끝난 다음에 빈 칸의 갯수를 세어 최대값만을 구한다. 벽을 세 개 놓을 수 있는 모든 경우는 [0][j]부터 [N-1][M-1]까지 탐색하면서..
[Python] 백준 6118번 문제, 숨바꼭질 https://www.acmicpc.net/problem/6118 6118번: 숨바꼭질 재서기는 수혀니와 교외 농장에서 숨바꼭질을 하고 있다. 농장에는 헛간이 많이 널려있고 재서기는 그 중에 하나에 숨어야 한다. 헛간의 개수는 N(2
[Python] 백준 1245번 문제, 농장 관리 https://www.acmicpc.net/problem/1245 1245번: 농장 관리 첫째 줄에 정수 N(1
[Python] 백준 1697번 문제, 숨바꼭질 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 이 문제는 너비 우선 탐색입니다. 그런데 입력을 그래프가 아닌 시작점과 끝점만 입력을 받을까? 그래프 정보가 없기 때문에 직접 그래프를 만들어주면서 탐색을 진행해야 한다. 그럼 그래프는 어떻게 만들까? 현재 foucs 값을 현재 노드의 값으로 지정하고 가중치가 없는 3개의 간선을 갖는다. 그 간선의 노드 값들은 focus의 { -1, +1, *2 }한 값들이다. 예제 입..
[Python] 백준 2178번 문제, 미로 탐색 https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 너비 우선 탐색(BFS)를 이용하여 미로를 빠져 나가기 위한 최소 이동 횟수를 구하는 문제이다. 그래서 BFS를 위해 방문 정보를 담는 visited와 queue는 무조건 있어야 한다. blocks을 초기화 할 때 좌우상하 이동을 위해 padding을 주었고(Index Out 에러 방지) blocks에 칸이 1인지 0인지를 입력 받은 후에 BFS 메소드에 (N, M, blocks. queue, visited)를 넘겨 주어 출구인..

728x90
반응형