문제 출처
1. 문제설명
NxM
행렬의 맵이 있다.
0
은 이동할 수 있는 곳, 1
은 벽이 있는 곳이다.
- (1,1)에서 (N,M)까지의 최단 경로를 구하려고 한다.
- 만약 이동 중에 벽을 부수고 이동하는 게 더 효율적이라면 벽을
K
개까지 부수고 이동한다.
- 최단 경로를 구하라
2. 알고리즘 설계
- BFS 문제이다.
- 상하좌우로 한칸씩 이동하면서 가중치 값을 +1 해주면 된다.
- 단, 벽을 부수고 이동했을 때와, 부수지 않고 이동했을 때 모두 확인
3. 로직
N*M
크기의 visited 배열을 사용하면, 목적지에 도착하면 바로 값을 리턴해버린다.
- 특정 지점을 벽을 부수고 이동했을 때와 부수지 않고 이동했을 때를 구분해야 한다.
4. 전체 코드