Closed baexxbin closed 2 weeks ago
완전 탐색
, 백 트래킹
가능DFS + 백 트래킹
과 BFS
DFS
로 방화벽을 3개 설치BFS
로 불이 번지는 것을 구현BFS
를 진행하면서 불이 붙는 수를 빈 영역 빼주고 최댓값 갱신BFS
가 완료 되었다면 방화벽 설치를 백 트래킹
을 하여 모든 경우의 수를 구해줌O(N * M^3)
DFS
BFS
(Queue)
,
safe()
O(N^2)
)백트래킹(dfs)
bfs
O((N*M)^3 )
+ BFS 풀이 O(N*M)
= O((N*M)^4)
임의의 조합을 만들어서 방화벽을 설치하는 부분에서 백트래킹을 어떻게 사용하면 되는지 알 수 있었어요. 백트래킹 종료조건과 다음 조합을 위해 삭제 기준을 정하는게 어려웠어서 여러 DFS 문제를 풀어봐야겠어요!
3 <= 가로, 세로 <= 8
2 <= 총 불의 개수 <= 10
3 <= 총 빈 칸의 개수
방화벽을 3개 추가했을 때, 불이 가지 않는 곳의 최대 개수 구하기
→ 완탐: 조합: 64-2C3 × BFS: 64 × 4
< 1억
emptyArea
: 처음 map에 대한 정보를 입력받을 때, 빈 칸의 수 세기fireArea
: 방화벽을 3개 놓았다면 BFS
를 통해 불이 번질 수 있는 곳의 개수 세기result = Math.min(result, emptyArea - 3 - fireArea)
백트래킹 할 때, 주어진 자원 최대한 활용 잘 하기 ⭐