https://www.acmicpc.net/problem/1261
처음에 진짜 문제부터 이해 못할뻔했다.
뭔 알고스팟에 있다면....
뭔 궁극의 무기 sudo....
그냥 문제는 n*n 크기의 방들이 주어지고
0은 지날 수 있는곳
1은 벽
이다.
그리고 1,1 위치부터 n,n 까지의 위치까지 가기 위해서 최소 몇개의 벽을 부숴야 하는가?
에 대한 문제인것
문제 풀이에 앞서
[BFS] 백준 13549번 숨바꼭질 3(C++)
https://www.acmicpc.net/problem/13549 진짜 넘 어려웠어이모티콘 문제푼거처럼 할려했는데 #include #include using namespace std;int n, s;bool visited[100001];void bfs(int temp);int main(){ cin >> n >> s; bfs(n);}void bfs(int temp){ queue
lee-soo.tistory.com
숨바꼭질 3번과 비슷하다는 느낌을 받았다.
숨바꼭질 3번 문제가 뭐였는가?
한 선형 위치에 따른 시간 위치의 변화를 사용한 해당 위치로 가기위한 최소의 비용 구하기
였는데
이번 문제는 선형 위치가 아닌 2차원 의 위치에 있는 것이고,
특정 행동에 대한 비용이 늘어나거나 늘어나지않음.
이 공통적이다.
우리는 나아갈 수 있는 면이 모두 1(벽)으로 둘러쌓였을때, 1을 뿌시면 비용이 1증가한다는 전제조건이 존재한다.
숨바꼭질3번을 풀었을때 내가 애먹었던 부분은
"q안에 같은 위치로 가지만 더 작은 비용이 존재한다. 하지만 순서상 더 큰 비용이 먼저 pop 되기 때문에 더 작은 비용이 오기전에 프로그램이 종료된다"
였다.
그렇다면? 이 벽 뿌수기 문제또한 동일한 것이다.
예를들어
010
111
100
이란 미로가 있다고 해보자
여기서 1,1 에서 출발해서
먼저 ㄱ 모양으로 가는 경우를 생각해보자
3,3 까지 1을 세번 뿌시니 3,3 q에는 비용이 3이 들어가고
3,3까지 벽을 두번 뿌시니 비용이 2가 들어간다
하지만 만약 우리가 순서상
bfs를 사용한다고 했을때
이렇게 왼쪽에 있는 벽부터 고려를 한다고 하면, 3,3 의 q안에는 비용이 3이 먼저 들어가고 2가 들어간다
그럼 해당 위치의 q가 pop될때, 조건문을 통해 프로그램이 종료하게 되는 문제가 발생한다
그렇다면?
숨바꼭질 3에서 해줬던 것 처럼 우선순위 큐를 사용한다
'코딩 테스트 준비! (백준) > BFS' 카테고리의 다른 글
[BFS] 백준 13549번 숨바꼭질 3(C++) (0) | 2025.05.09 |
---|---|
[BFS] 백준 14226번 이모티콘(C++) (0) | 2025.05.09 |
[BFS] 백준 13913번 숨바꼭질 4 (C++) (0) | 2025.05.08 |
[BFS] 백준 1697번 숨바꼭질(C++) (0) | 2025.05.08 |
[BFS] 백준 2146번 다리 만들기(C++) (0) | 2025.05.08 |