본문 바로가기

Algorithms/Baekjoon OJ

[Baekjoon]14442.벽 부수고 이동하기2

14442. 벽 부수고 이동하기2

http://www.acmicpc.net/problem/14442

 

14442번: 벽 부수고 이동하기 2

첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자.

www.acmicpc.net


벽 부수고 이동하기 문제에서 벽을 부술 수 있는 개수가 K개로 주어지는 문제이다. 벽을 부술 수 있는 개수가 최대 1개에서 최대 K개로 바뀐 것이다. 부술 수 있는 벽의 개수가 K개로 늘어났으므로 visited배열의 크기도 늘려줘야 한다. 

 

visited[y][x][벽을 부순 개수 : 0 ~ K]

 

nextC =  curC + 1 로 벽을 부술수 있을때까지 부수면서 탐색을 진행한다. 즉 nextC<=K 일때만 벽을 부수면서 탐색을 진행할 수 있다.

	if (map[nextY][nextX] == 1) { // 벽 일때 
		if (nextC <= K && !visited[nextY][nextX][nextC]) {
			visited[nextY][nextX][nextC] = true;
			q.add(new Point(nextX, nextY, nextC));
		}
	}						

조건에 따라서 bfs를 수행하는 문제는 3차원 배열을 이용해서 푼다는 개념을 확실히 기억해놔야겠다. 

 

<전체코드>

'Algorithms > Baekjoon OJ' 카테고리의 다른 글

[Baekjoon]17070.파이프 옮기기1  (0) 2019.07.24
[Baekjoon]1987.알파벳  (0) 2019.07.16
[Baekjoon]2206.벽 부수고 이동하기  (0) 2019.07.09
[Baekjoon]5427.불  (0) 2019.07.05
[Baekjoon]2146.다리만들기  (0) 2019.06.27