반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Python
- 도커 컨테이너
- 리눅스
- ios
- boj
- 네트워크
- 도커 이미지
- devops
- 클라우드
- os
- 도커
- 도커 명령어
- 컨테이너
- centOS7
- 데브옵스
- kubernetes
- Swift
- swift 클로저
- 부스트코스
- AWS
- 프로세스
- centOS
- 인프라
- 쿠버네티스
- C++
- docker
- 운영체제
- linux
- k8s
- NGINX
Archives
- Today
- Total
귀염둥이의 메모
[백준] 14502번: 연구소 (C++) 본문
반응형
백트래킹과 BFS를 이용해서 구현했다.
백트래킹을 이용해서 벽 3개를 세우는 모든 경우의 수를 구하였다.
벽 3개가 세워지면
- 1) BFS를 이용해서 바이러스를 전파시킨다.
- 2) 바이러스 전파가 끝난 후 안전영역을 구한다.
- 3) 안전영역의 최대 크기를 갱신한다.
소스코드
#include <bits/stdc++.h>
using namespace std;
int n, m, result;
int g[8][8];
int vis[8][8];
int bfs() {
queue<pair<int, int> > q;
int d[4][2] = {{0, 1} ,{0, -1}, {1, 0}, {-1, 0}};
int cnt = 0;
// 1) 바이러스 전파
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (g[i][j] == 2) q.push(make_pair(i, j));
while (!q.empty()) {
int x = q.front().first, y = q.front().second;
q.pop();
for (int i = 0; i < 4; i++) {
int nx = x + d[i][0];
int ny = y + d[i][1];
if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
if (g[nx][ny] || vis[nx][ny]) continue;
vis[nx][ny] = 1;
q.push(make_pair(nx, ny));
}
}
// 2) 바이러스 전파 완료후 안전영역 구하기
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (g[i][j] == 0 && vis[i][j] == 0) cnt++;
return cnt;
}
void makeWall(int k) {
if (k == 3) { // 벽 3개가 세워지면
memset(vis, 0, sizeof(vis));
result = max(result, bfs()); // 3) 안전영역 최대 크기 갱신
return;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (g[i][j]) continue;
g[i][j] = 1; // 벽을 세우고
makeWall(k + 1);
g[i][j] = 0; // 벽 다시 없애줌
}
}
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> g[i][j];
makeWall(0);
cout << result;
return 0;
}
반응형
'CS > 백준' 카테고리의 다른 글
[백준] 2573번: 빙산 (C++) (2) | 2021.04.06 |
---|---|
[백준] 14891번: 톱니바퀴 (C++) (1) | 2021.04.04 |
[백준] 14499번: 주사위 굴리기 (C++) (0) | 2021.04.02 |
[백준] 2468번: 안전 영역 (C++) (0) | 2021.04.02 |
[백준] 14503번: 로봇 청소기 (C++) (0) | 2021.03.31 |
Comments