๋ฌธ์
์ธ์ฒด์ ์น๋ช ์ ์ธ ๋ฐ์ด๋ฌ์ค๋ฅผ ์ฐ๊ตฌํ๋ ์ฐ๊ตฌ์์์ ๋ฐ์ด๋ฌ์ค๊ฐ ์ ์ถ๋์๋ค. ๋คํํ ๋ฐ์ด๋ฌ์ค๋ ์์ง ํผ์ง์ง ์์๊ณ , ๋ฐ์ด๋ฌ์ค์ ํ์ฐ์ ๋ง๊ธฐ ์ํด์ ์ฐ๊ตฌ์์ ๋ฒฝ์ ์ธ์ฐ๋ ค๊ณ ํ๋ค.
์ฐ๊ตฌ์๋ ํฌ๊ธฐ๊ฐ N×M์ธ ์ง์ฌ๊ฐํ์ผ๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ, ์ง์ฌ๊ฐํ์ 1×1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ์ฐ๊ตฌ์๋ ๋น ์นธ, ๋ฒฝ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๋ฒฝ์ ์นธ ํ๋๋ฅผ ๊ฐ๋ ์ฐจ์งํ๋ค.
์ผ๋ถ ์นธ์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ๋ฉฐ, ์ด ๋ฐ์ด๋ฌ์ค๋ ์ํ์ข์ฐ๋ก ์ธ์ ํ ๋น ์นธ์ผ๋ก ๋ชจ๋ ํผ์ ธ๋๊ฐ ์ ์๋ค. ์๋ก ์ธ์ธ ์ ์๋ ๋ฒฝ์ ๊ฐ์๋ 3๊ฐ์ด๋ฉฐ, ๊ผญ 3๊ฐ๋ฅผ ์ธ์์ผ ํ๋ค.
์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ด ์ฐ๊ตฌ์๊ฐ ์๊ธด ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด์.
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
์ด๋, 0์ ๋น ์นธ, 1์ ๋ฒฝ, 2๋ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ๊ณณ์ด๋ค. ์๋ฌด๋ฐ ๋ฒฝ์ ์ธ์ฐ์ง ์๋๋ค๋ฉด, ๋ฐ์ด๋ฌ์ค๋ ๋ชจ๋ ๋น ์นธ์ผ๋ก ํผ์ ธ๋๊ฐ ์ ์๋ค.
2ํ 1์ด, 1ํ 2์ด, 4ํ 6์ด์ ๋ฒฝ์ ์ธ์ด๋ค๋ฉด ์ง๋์ ๋ชจ์์ ์๋์ ๊ฐ์์ง๊ฒ ๋๋ค.
2 1 0 0 1 1 0
1 0 1 0 1 2 0
0 1 1 0 1 0 0
0 1 0 0 0 1 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0
๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง ๋ค์ ๋ชจ์ต์ ์๋์ ๊ฐ์์ง๋ค.
2 1 0 0 1 1 2
1 0 1 0 1 2 2
0 1 1 0 1 2 2
0 1 0 0 0 1 2
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0
๋ฒฝ์ 3๊ฐ ์ธ์ด ๋ค, ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง ์ ์๋ ๊ณณ์ ์์ ์์ญ์ด๋ผ๊ณ ํ๋ค. ์์ ์ง๋์์ ์์ ์์ญ์ ํฌ๊ธฐ๋ 27์ด๋ค.
์ฐ๊ตฌ์์ ์ง๋๊ฐ ์ฃผ์ด์ก์ ๋ ์ป์ ์ ์๋ ์์ ์์ญ ํฌ๊ธฐ์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (3 ≤ N, M ≤ 8)
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋์ ๋ชจ์์ด ์ฃผ์ด์ง๋ค. 0์ ๋น ์นธ, 1์ ๋ฒฝ, 2๋ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ์์น์ด๋ค. 2์ ๊ฐ์๋ 2๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 10๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
๋น ์นธ์ ๊ฐ์๋ 3๊ฐ ์ด์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ป์ ์ ์๋ ์์ ์์ญ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ค.
๊ตฌํ ๋ฐฉ๋ฒ
1. ์ง๋๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
2. ์ง๋์์ ๋ฒฝ์ ๋์ ์ ์๋ ์ขํ๋ฅผ wall ํ๋ ฌ์ ์ ๋ ฅํ๋ค.
3. for๋ฌธ์ ์ด์ฉํ๋ฉฐ ๋ฒฝ์ 3๊ฐ ๋์ ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ์ฐํ๋ค.
4. ๋ฒฝ์ 3๊ฐ ๋์์ ๋์ ์ง๋๋ฅผ n_map์ ์ ๋ ฅํ๊ณ ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง๋ ๊ฒ์ virus_spread ํจ์๋ก ๊ตฌํํ๋ค.
5. โโโโ์ ๋ฐฉํฅ ๋ชจ๋ ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง๋ ๊ฒ์ ๊ตฌํํด์ฃผ์ด ๋ฐ๋ก๊ฐ ์๋๋ก ํ๋ค.
๊ตฌํ ์๊ฐ
180ms
#include <iostream>
#include <algorithm>
using namespace std;
int map[9][9];
int n_map[9][9];
int N, M;
int virus[11][2];
int wall[64][2];
int wallcase()
{ // ๋์ ์ ์๋ ๋ฒฝ ์์น ์ฐพ๊ธฐ
int wall_num = 0;
for(int i = 0; i < N; i++){
for(int j = 0; j < M; j++){
if(map[i][j] == 0){
wall[wall_num][0] = i;
wall[wall_num][1] = j;
wall_num++;
}
}
}
return wall_num;
}
void virus_spread(int n, int m){
int spread = 1;
while(m+spread < M && n_map[n][m+spread] != 1)
{ // ๋ฐ์ด๋ฌ์ค ์ฐ๋ก ํผ์ง
n_map[n][m+spread] = 2;
spread++;
}
spread = 1;
while(m-spread >= 0 && n_map[n][m-spread] != 1)
{ // ๋ฐ์ด๋ฌ์ค ์ข๋ก ํผ์ง
n_map[n][m-spread] = 2;
spread++;
}
spread = 1;
while(n+spread < N && n_map[n+spread][m] != 1)
{ // ๋ฐ์ด๋ฌ์ค ์๋๋ก ํผ์ง
n_map[n+spread][m] = 2;
spread++;
}
spread = 1;
while(n-spread >= 0 && n_map[n-spread][m] != 1)
{ // ๋ฐ์ด๋ฌ์ค ์๋ก ํผ์ง
n_map[n-spread][m] = 2;
spread++;
}
}
int main()
{
cin >> N >> M;
int virus_num = 0;
for(int i=0; i<N; i++)
{
for(int j=0; j<M; j++)
{
cin >> map[i][j];
if(map[i][j] == 2)
{ // ๋ฐ์ด๋ฌ์ค ์์น ์
๋ ฅ
virus[virus_num][0] = i;
virus[virus_num][1] = j;
virus_num++;
}
}
}
int wall_num = wallcase();
int max_Safe = 0;
for(int i=0; i<wall_num-2; i++) // ๋ฒฝ 3๊ฐ๋ฅผ ๋์์ ๋ ๋ฐ๋๋ ์ ์ง๋
{
for(int j=i+1; j<wall_num-1; j++)
{
for(int k=j+1; k<wall_num; k++)
{
//copy(&map[0][0], &map[N][M] + (N * M), &n_map[0][0]);
for(int n=0; n<N; n++){ // n_map ๋ณต์ฌ
for(int m=0; m<M; m++){
n_map[n][m] = map[n][m];
}
}
// ๋ฒฝ ๋๊ธฐ
n_map[wall[i][0]][wall[i][1]] = 1;
n_map[wall[j][0]][wall[j][1]] = 1;
n_map[wall[k][0]][wall[k][1]] = 1;
int SafeZone_num = 0;
for(int n=0; n<N; n++){ // ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง
for(int m=0; m<M; m++){
if(n_map[n][m] == 2){
virus_spread(n, m);
}
}
}
for(int n=N-1; n>=0; n--){ // ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง
for(int m=0; m<M; m++){
if(n_map[n][m] == 2){
virus_spread(n, m);
}
}
}
for(int n=0; n<N; n++){ // ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง
for(int m=M-1; m>=0; m--){
if(n_map[n][m] == 2){
virus_spread(n, m);
}
}
}
for(int n=N-1; n>=0; n--){ // ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง
for(int m=M-1; m>=0; m--){
if(n_map[n][m] == 2){
virus_spread(n, m);
}
}
}
for(int n=0; n<N; n++){ // ์์ ์ง๋ ๊ฐ์ ๊ตฌํ๊ธฐ
for(int m=0; m<M; m++){
if(n_map[n][m] == 0){
SafeZone_num++;
}
}
}
if(SafeZone_num > max_Safe){ //์์ ์ง๋ ์ต๋๊ฐ ๊ตฌํ๊ธฐ
max_Safe = SafeZone_num;
}
}
}
}
cout << max_Safe;
return 0;
}
'ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ณต๋ถ > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 14890๋ฒ : ๊ฒฝ์ฌ๋ก with C++ (0) | 2023.04.07 |
---|---|
๋ฐฑ์ค 14503๋ฒ : ๋ก๋ด์ฒญ์๊ธฐ with C++ (0) | 2023.04.06 |
๋ฐฑ์ค 4458๋ฒ : ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก with C++ (0) | 2023.04.03 |
๋ฐฑ์ค 1357๋ฒ : ๋ค์งํ ๋ง์ with C++ (0) | 2023.04.03 |
๋ฐฑ์ค 11047๋ฒ : ๋์ 0 with C++ (0) | 2023.04.03 |