https://www.acmicpc.net/problem/3184
์ค๋๋ง์ ๋์์จ PS~~~^~^
์ฌ๋ฌ๋ถ ํน์ ํ ๋ฒ์ ๋ง์ ๊ธฐ๋ถ์ด ์ด๋ค์ง ์์๋์
์ผ๋จ ์ ๋ ์๋๋ค
ใ ํํใ ฃํํ
์ง๊ธ ๋น์ฐํ ๋ญํ๋ ์์ธ ์๊ฒ ์ง ํ๊ณ ๋ ๋ค ๋๋ ค๋ดค๋๋ฐ ๊ฐ์๊ธฐ 100% ๋จ๊ณ ๋ง์์ต๋๋ค ๋ ์ ์๋ฆฌ์ง๋ฅผ๋ปํจ
์ ๋ง ์ค๋๋ง์ ๋ฐฑ์ค ๋ค์ ํ๊ณ ์๋๋ฐ ์ด์งธ์์ธ์ง ํ์ฐธ ๊ณต๋ถํ ๋๋ณด๋ค ๋จธ๋ฆฌ๊ฐ ๋ ํฝํฝ ์ ๋์๊ฐ์ ,,,
์๋ ์ ์ค๋ฒ 1 ์ด๋ ๊ฒ ๋นจ๋ฆฌ ๋ชป ํ์์๋๋ฐ...
๊ทธ๋ผ ์ค๋ช ์ ํด๋ณด๊ฒ ์ต๋๋น
1. ์ฐ์ ๊ธฐํธ๋ฅผ ์ ๋ถ ์ซ์๋ก ๋ฐ๊ฟ ์ด์ฐจ์ ๋ฐฐ์ด map์ ์ ์ฅํด์ค๋ค
๋ณด์๋ง์ ์์ธ์ง ๊ธฐํธ ๊ทธ๋๋ก ๋ ๋๋ฉด ๋ด๊ฐ ๋๋ฌด ํท๊ฐ๋ฆด ๊ฒ ๊ฐ์์ ๊ทธ๋ฅ ์น ๋ค ์ซ์๋ก ๋ณํํด์ ์ ์ฅํด์ฃผ์์ต๋๋ค
์ฌ์ค ๋ญ ์คํ ์๋์ ์์ฒญ ํฐ ์ ์ฝ์ด ์๋ ๊ทธ๋ฐ ๋ฌธ์ ์์ผ๋ฉด ๊ตณ์ด ์ํ๋๊ฒ ๋ ์ด๋์ผ ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ฐ,, ๊ทธ๋ฅ ๋๋ ์ด๋ ๊ฒ ํด์
์ํด๋ ๋๊ธด ํ ๊ฒ ๊ฐ์ต๋๋ค์ฉ
2. count๋ผ๋ ํจ์๋ฅผ ํธ์ถํด์ค๋ค
์ด ๋, ๊ฑ finalnum (์ต์ข ๊ฒฐ๊ณผ๊ฐ) ์ด๋ผ๋ 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ ํฌ์ธํฐ๋ก ๋ฐ์, ํจ์ ์์์ ๋ฐฐ์ด์ ์ง์ ์ ๊ทผํ๋๋ก ํ์๋ค. finalnum[0] = sheep num, finalnum[1] = wolf num
return ๊ฐ์ด ๋ ๊ฐ์ฌ์ผ ํ๋ ๊ฒ์ ์๊ฐํ๊ธฐ ๊ท์ฐฎ์๊ธฐ ๋๋ฌธ ใ
count ํจ์์ ์คํ์ด ์ข ๋ฃ๋๋ฉด finalnum ๋ฐฐ์ด์ ์ต์ข ์์ ์์ ๋๋์ ์๊ฐ ์ ๋ฐ์ดํธ ๋์ด์์ผ๋ฏ๋ก ์ด๊ฑธ ๊ทธ๋๋ก ์ถ๋ ฅํด์ค๋ค.
3. count ํจ์
์ขํ (0,0)๋ถํฐ (R-1, C-1)๊น์ง ํ๋์ฉ ์์์ ์ ์ก์ dfs๋ฅผ ๋๋ค
์ด ๋, ์ ์ด๋ ๊ฒ ํ๋๋ฉด, ์ธํ๋ฆฌ๋ก ๋งํ์๋ ํ ์์ญ์ ๋ค ๋๋ฉด DFS๊ฐ ๋๋๋๋ก ์ค๊ณํ๊ธฐ ๋๋ฌธ์, ๋ ๋ค๋ฅธ ์์ญ์ ์์์ ์ด ์ด๋์ผ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ! ๋จ, ์ด๋ฏธ ๋ณธ ์์ญ์ ๋ค์ ๋ณด์ง ์๊ธฐ ์ํด check ๊ฐ์ด 0์ผ ๋๋ง ๋๋๋ก ํ๋ค.
main ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก sheepwolf๋ผ๋ 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค์ด, ์ด ๋ฐฐ์ด์ ํด๋น ์์ญ์ ์์๋ ์์ ์์ ๋๋์ ์๊ฐ ์ ์ฅ๋๋ค.
๋ง์ฝ ์ด๋ค ์์ญ์ ๋๋๋ณด๋ค ์์ด ๋ง๋ค๋ฉด, ๊ทธ ์์ ์๋งํผ finalnum[0] ์ ์ฆ๊ฐ์์ผ์ฃผ๊ณ , ๋๋์ ์๋ ์ฆ๊ฐ์ํค์ง ์๋๋ค
๋ฐ๋๋ก ๋๋๊ฐ ์๋ณด๋ค ๋ง๊ฑฐ๋ ๊ฐ๋ค๋ฉด, ๊ทธ ๋๋์ ์๋งํผ finalnum[1]์ ์ฆ๊ฐ์์ผ ์ค๋ค
์ด๋ฐ์์ผ๋ก map ์ ์ฒด๋ฅผ ํ ๋ฐํด ๋ค ๋ ๋ค์์ ํจ์ ๋!
์ ์ฐธ, dfs ํ ๋ฒ ๋๋๋ฉด sheepwolf ๋ฐฐ์ด ์ด๊ธฐํ ํด์ฃผ๋๊ฑฐ ์์ง ๋ง๊ธฐ~~ (์ค์ ๋ก ์ํ๋ค๊ฐ ๊ดด์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ด)
4. DFS ํจ์
๊ธฐ๋ณธ์ ์ธ dfs ํจ์์ด๋ค
์ผ๋จ ๋ฐฉ๋ฌธ ํ๋ ์ขํ์ด๊ฑฐ๋, ์ธํ๋ฆฌ๋ฉด return ํด์ ๋ค๋ก backํด์ฃผ๊ณ
์๋๋ผ๋ฉด ๋ฐฉ๋ฌธ ํ๋ค๋ ํ์ ํด์ฃผ๊ธฐ~ check[x][y] = 1 ํด์ฃผ๊ธฐ~
๊ทธ๋ฆฌ๊ณ ์ง๊ธ ์๋ ์ขํ๊ฐ ์์ด๋ฉด ์ ์ ์ฆ๊ฐ, ๋๋๋ฉด ๋๋ ์ ์ฆ๊ฐ ํด์ฃผ๊ณ
๊ทธ๋ฆฌ๊ณ ๋์ ์ด์ ์ํ์ข์ฐ๋ก ์ด๋ํด๋ณธ๋ค
์ด ๋, ๋ฒ์ ๋ฒ์ด๋์ง ์๊ฒ ํด์ฃผ๊ธฐ!
์์ญ์ ์ธ๋ ๋ฌธ์ ์ ๊ฒฝ์ฐ ์ฐ์ธก, ์๋๋ก๋ง ๊ฐ๋๊ฒ ์๋๋ผ ๋ฌด์กฐ๊ฑด ์๋ ์ข์ธก๋ ํ์ํด๋ด์ผํ๋ค
์ด๋๊ฐ ๋ซ๋ ค์์์ง ๋ชจ๋ฅด๊ฒ ๋๋ฌด๋ค
ํ ๋ฒ ๋ ๋ ์์ญ ์ ์ฒด๋ฅผ ๋ค ๋์์ผ ๋จธ๋ฆฌ ์ํ ์ผ์ ๋ง์ ์ ์๋ค
๊ทธ๋์ ๊ฒฐ๋ก ์ ์ผ๋ก DFS๋ฅผ ํ ๋ฒ ๋ ๋๋ง๋ค, ์ธํ๋ฆฌ ์์ ์๋ ์์ญ ํ๋๋ฅผ ์ ๋ถ ๋๊ณ , ๊ทธ ์์ญ์ check ํ์ ํด์ค ๋ค์, ์์ ์์ ๋๋์ ์๋ฅผ ์ธ์ count ํจ์๋ก ์ ๋ฌํด์ค๋ค.
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
#define MAX 250
#define MIN 3
int map[MAX][MAX] = {0,};
int check[MAX][MAX] = {0,};
int R, C =0;
void count(int* finalnum);
void DFS(int x, int y, int* sheepwolf);
/*
. = ๋น์ด์๋ field = 0
# = ์ธํ๋ฆฌ = 1
o = ์ = 2
v = ๋๋ = 3
*/
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int i, j =0;
cin >> R >> C;
for(i=0;i<R; i++){
for(j=0; j<C; j++){
char tmp;
cin >> tmp;
if (tmp == '.')
map[i][j] = 0;
else if (tmp == '#')
map[i][j] = 1;
else if (tmp == 'o')
map[i][j] = 2;
else if (tmp == 'v')
map[i][j] = 3;
}
}
int n, m = 0;
// cout <<"map------\n" ;
// for(n=0; n<R; n++){
// for(m=0;m<C;m++){
// cout << map[n][m]<<" ";
// }
// cout <<"\n";
// }
// cout <<"\n";
int finalnum[2]= {0,0};
count(finalnum);
cout << finalnum[0] << " " << finalnum[1];
}
void count(int* finalnum){
int i, j=0;
int n, m=0;
int sheepwolf[2] = {0,0}; //{์์ ์, ๋๋์}
for(i=0; i<R; i++){
for(j=0; j<C; j++){
if(check[i][j]==0){
DFS(i, j, sheepwolf);
// cout << "check ------\n";
// for(n=0; n<R; n++){
// for(m=0;m<C;m++){
// cout<<check[n][m]<<" ";
// }
// cout <<"\n";
// }
// cout <<"\n";
if(sheepwolf[0]>sheepwolf[1]){
finalnum[0] += sheepwolf[0];
}
else {
finalnum[1] += sheepwolf[1];
}
sheepwolf[0] = 0 ; sheepwolf[1] = 0;
}
}
}
}
void DFS (int x, int y, int* sheepwolf){
if(check[x][y] == 1 || map[x][y] == 1)
return;
if (map[x][y] == 2) sheepwolf[0] ++;
if (map[x][y]==3) sheepwolf[1] ++;
check[x][y] = 1;
if(x>0) DFS(x-1, y, sheepwolf);
if(y>0) DFS(x, y-1, sheepwolf);
if(x<R-1) DFS(x+1,y, sheepwolf);
if(y<C-1) DFS(x,y+1, sheepwolf);
}
๊ทธ๋ฆฌ๊ณ ๊น๋ํ๊ฒ 1ํธ๋ง์ ๋ง์์
ํ๋ณตํด๋ผ.....์ด์ ๊ณจ๋๋ก ๋์ ํด๋ณผ๊ฒ์ฉ
'๐ก๐ธ๐ธ๐ถ๐ฃ: ๐๐๐๐๐๐พ๐๐ฝ๐ > ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ9095 : 1, 2, 3 ๋ํ๊ธฐ (Silver 3) (2) | 2023.02.24 |
---|---|
BOJ2468 : ์์ ์์ญ (Silver 1) (0) | 2023.02.05 |
BOJ5671 : ํธํ ๋ฐฉ ๋ฒํธ (Silver 5) (0) | 2021.08.20 |
BOJ14889 : ์คํํธ์ ๋งํฌ (Silver 3) (0) | 2021.08.20 |
BOJ 2503 : ์ซ์์ผ๊ตฌ (Silver 5) (0) | 2021.08.20 |