본문 바로가기

BFS4

[백준] 2206번 벽 부수고 이동하기 (Python) 정답 코드 및 풀이는 맨 아래에 있습니다. https://www.acmicpc.net/problem/2206 구상이 상당히 힘들었다. 시간을 꽤나 사용한 것 같다. 난이도가 꽤 있었던 bfs문제이다. [문제] N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로로 이동하려 한다. 최단경로는 맵에서 가장 적은 개수의 칸을 지나는 경로를 말하는데, 이때 시작하는 칸과 끝나는 칸도 포함해서 센다. 만약에 이동하는 도중에 한 개의 벽을 부수고 이동하는 것이 좀 더 경로가 짧아진다면, 벽을 한 개 까지 부수고 이동하여도 된다. 한 .. 2023. 2. 1.
[백준] 7576번 토마토 (Python) 정답 코드 및 풀이는 맨 아래에 있습니다. https://www.acmicpc.net/problem/7576 예전에 풀었을 땐 꽤나 어려웠던 것 같다. 다시 풀어보니 난이도 적당한 bfs문제였다. [문제] 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는.. 2023. 1. 31.
[백준] 2606번 바이러스 (Python) 정답 코드 및 풀이는 맨 아래에 있습니다. https://www.acmicpc.net/problem/2606 난이도 낮은 개념 공부용 문제이다. [문제] 신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다. 예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기 때문에 영향을 받지 않는다. 어느 날 .. 2023. 1. 30.
BFS 이론 BFS(깊이 우선 탐색)은 그래프에서 가까운 노드부터 탐색하는 알고리즘이다. 큐 자료구조를 이용한다. 다음과 같은 과정으로 동작한다. DFS와 마찬가지로 한 번 방문한 노드는 다시 방문하지 않는다. 따라서 방문 처리 리스트를 만들어 방문을 처리해 주며 노드에 접근하도록 한다. 큐에 시작노드를 넣고 방문처리한다. 큐에서 노드를 꺼내고, 해당 노드의 인접 노드 중 아직 방문하지 않은 노드를 모두 큐에 삽입하고 방문처리 한다. 모든 노드를 다 탐색하거나 문제를 해결해 더이상 탐색할 필요가 없을 때까지 2번 과정을 반복한다. 위와 같은 그래프가 있고, 시작 노드는 1이며 번호가 낮은 인접노드부터 방문한다고 하자. 시작노드 방문 처리 및 큐에 넣기. 큐 : 1 큐에서 1 빼고 1의 인접노드인 2 3 8방문처리 후.. 2023. 1. 18.