문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

6013 : 백트래킹 — 연구소 바이러스

•시간제한: 2.000 S •메모리제한: 256 MB •제출: 0 •통과: 0 •만든사람: suakii

6013 : 백트래킹 — 연구소 바이러스

시간 2.000s · 메모리 256MB · 제출 0 · 정답 0

문제 설명

$N \times M$ 크기의 직사각형 격자판 연구소에 빈칸, 벽, 바이러스가 존재합니다. 바이러스는 인접한 상하좌우 빈칸으로 모두 퍼져나갈 수 있습니다.
연구소의 안전을 위해 새로 벽을 정확히 3개 설치하려고 합니다. 3개의 벽을 새로 세운 뒤, 바이러스가 퍼지지 못하는 안전 영역(빈칸)의 최대 크기를 구하십시오.

풀이 전략:
1. 백트래킹 조합을 사용해 현재 빈칸들 중 벽을 세울 3개의 좌표 조합을 고릅니다.
2. 벽을 세운 뒤 BFS/DFS 탐색을 재귀적으로 호출하여 바이러스를 확산시킵니다.
3. 확산 완료 후 안전 영역의 크기를 계산해 최댓값을 갱신합니다.

[제약 조건]
• 격자 크기: $3 \le N, M \le 8$ (정수)
• 격자 값: 0(빈칸), 1(벽), 2(바이러스)
• 바이러스는 1개 이상 주어집니다.

입력 설명

첫째 줄에 격자의 세로 크기 $N$과 가로 크기 $M$이 주어집니다. ($3 \le N, M \le 8$)
둘째 줄부터 $N$개의 줄에 격자 판의 상태가 공백으로 구분되어 주어집니다.
- 0: 빈칸
- 1: 벽
- 2: 바이러스

출력 설명

정확히 3개의 벽을 새로 설치하여 얻을 수 있는 안전 영역의 최대 크기를 출력합니다.

입력 예시
COPY
복사되었습니다!

7 7
2 0 0 0 1 1 0
0 0 1 0 1 2 0
0 1 1 0 1 0 0
0 1 0 0 0 0 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0

출력 예시
COPY
복사되었습니다!

27

도움

빈칸의 개수가 최대 64개이므로 3개의 벽을 고르는 조합의 수는 $C(64, 3) = 41{,}664$개에 불과합니다. 각 조합마다 벽을 치고 복사된 격자판에서 바이러스(2)의 위치들로부터 BFS를 시작하여 안전 영역을 셉니다.
NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘