티스토리 뷰
백준 :: BOJ :: 17142 :: 연구소 3
출처 : https://www.acmicpc.net/problem/17142
#include <bits/stdc++.h>
using namespace std;
#define F(p,q) for(int p=0; p<q; p++)
struct S { int si, sj; };
int i, j, A[50][50], N, M, R = 1e4, c, z, r[4][2] = { {-1,0},{0,1},{1,0},{0,-1} };
int main() {
vector<S> v; vector<int> v3;
cin >> N >> M;
F(i, N) F(j, N) {
cin >> A[i][j]; if (A[i][j] > 1) { v.push_back({ i,j }); z++; } if (!A[i][j]) c++;
}
F(i, z - M) v3.push_back(0); F(i, M) v3.push_back(1);
if (!c) R = 0;
else {
do {
int B[50][50], dd = c, ti = 0; memcpy(B, A, sizeof(A)); queue<S> q;
F(i, v3.size()) { if (v3[i]) { q.push(v[i]); B[v[i].si][v[i].sj] = 3; } }
while (!q.empty()) {
int qs = q.size(); ti++;
while ((qs--)) {
S ts = q.front(); q.pop();
F(j, 4) {
int ni = ts.si + r[j][0], nj = ts.sj + r[j][1];
if ((ni >= 0 && nj >= 0 && ni < N && nj < N && !(B[ni][nj] % 2))) {
q.push({ ni,nj }); if (!B[ni][nj])dd--; B[ni][nj] = 3;
}
}
if (!dd) { R = min(R, ti); break; }
}
if (ti >= R) break;
}
} while (next_permutation(v3.begin(), v3.end()));
}
cout << (R < 1e4 ? R : -1);
return 0;
}
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ 17837] 새로운 게임 2 (0) | 2019.11.06 |
---|---|
[BOJ 17779] 게리맨더링 2 (0) | 2019.10.24 |
[BOJ 17140] 이차원 배열과 연산 (0) | 2019.09.18 |
[BOJ 17143] 낚시왕 (0) | 2019.05.14 |
[BOJ 17144] 미세먼지 안녕! (2) | 2019.05.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 17143
- STL
- 17144
- 시간 복잡도
- DFS
- SWEA
- SW Expert Academy
- 삼성
- 17140
- hackerrank
- 역량 테스트
- 알고리즘
- 17142
- 17779
- 입출력
- 연구소 3
- 게리맨더링 2
- 팁
- 새로운 게임 2
- string
- 트렌드
- 2018 카카오 블라인드 채용
- 17837
- 백준
- scanf
- boj
- DP
- 이차원 배열과 연산
- 2018 KAKAO BLIND RECRUITMENT
- 미세먼지 안녕!
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함