728x90
๊ฐ์ฅ ํฐ while ๋ฌธ ์์์ ๋ชจ๋ ๋นํ๊ฐ ๋ น์ ๋๊น์ง ๋ฐ๋ณตํ๋ค๋ ๊ฒ์ ์ ์ ๋ก ์ถ๋ฐ
์ฒ์ BFS์์๋ Continent๊ฐ ๋ช ๊ฐ์ธ์ง๋ฅผ count ํด์ค๋ค.
๋ ๋ฒ์งธ BFS์์๋ ๊ฐ ๋นํ์ ์ธ์ ํ ๋ฐ๋ค๊ฐ ๋ช ๊ฐ ์๋์ง count ํด์ minus_arr ๋ฅผ ๋ง๋ค์ด ์นด์ดํธ๋ฅผ ํด์ฃผ๊ณ ๋ง์ง๋ง์ Minus๋ฅผ ํ๊บผ๋ฒ์ ์งํ
while->for->for->while ์ด๋ ๊ฒ nested ๋์ด์๋๋ฐ๋ ์๊ฐ์ด๊ณผ๊ฐ ์๋๋ ๊ฑฐ๋ BFS DFS ์๊ณ ๋ฆฌ์ฆ ๋๋ฌธ์ธ๊ฐ..??
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
#include <cstring>
using namespace std;
int dx[4] = {0,0,-1,1};
int dy[4] = {1,-1,0,0};
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int row, col;
cin >> row >> col;
int visited[row+1][col+1] = {0,};
int arr[row+1][col+1];
int minus_arr[row+1][col+1];
for(int i = 0 ; i < row ; i++) {
for(int j = 0 ; j < col ; j++) {
cin >> arr[i][j];
}
}
int zero_count = 0;
int continent_count = 0;
int time_count = 0;
while(true) {
memset(visited, 0, sizeof(visited));
memset(minus_arr, 0, sizeof(minus_arr));
// ํ์ถํ๊ธฐ ์ํด ๋ค ๋
น์๋์ง ํ์ธ
for(int i = 0 ; i < row ; i++) {
for(int j = 0 ; j < col ; j++) {
if(arr[i][j] == 0)
zero_count++;
}
}
// ์ ๋ถ ๋
น์์ผ๋ฉด break
if(zero_count == row*col) break;
queue<pair<int,int>> q;
for(int i = 0 ; i < row ; i++) {
for(int j = 0 ; j < col ; j++) {
if(arr[i][j] != 0 && visited[i][j] == 0) {
q.push({i,j});
visited[i][j] = 1;
continent_count++;
while(!q.empty()) {
int r_row = q.front().first;
int r_col = q.front().second;
q.pop();
for(int m = 0 ; m < 4 ; m++) {
int n_row = r_row + dy[m];
int n_col = r_col + dx[m];
if(n_row >= 0 && n_row < row && n_col >= 0 && n_col < col
&& visited[n_row][n_col] == 0 && arr[n_row][n_col] != 0) {
q.push({n_row, n_col});
visited[n_row][n_col] = 1;
}
}
}
}
}
}
if(continent_count >= 2) break;
zero_count = 0;
continent_count = 0;
queue<pair<int,int>> qq;
for(int i = 0 ; i < row ; i++) {
for(int j = 0 ; j < col ; j++) {
if(arr[i][j] != 0) {
for(int m = 0 ; m < 4 ; m++) {
int nn_row = i + dy[m];
int nn_col = j + dx[m];
if(arr[nn_row][nn_col] == 0){
minus_arr[i][j]++;
}
}
}
}
}
for(int i = 0 ; i < row ; i++) {
for(int j = 0 ; j < col ; j++) {
if(minus_arr[i][j] != 0) {
if(arr[i][j] - minus_arr[i][j] < 0)
arr[i][j] = 0;
else
arr[i][j] -= minus_arr[i][j];
}
}
}
// for(int i = 0 ; i < row ; i++) {
// for(int j = 0 ; j < col ; j++) {
// cout << arr[i][j] << " ";
// }
// cout << endl;
// }
// cout << endl;
time_count++;
}
if(continent_count >= 2) cout << time_count;
else cout << "0";
return 0;
}
'๐ Self Study > ๐ BaekJoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค BaekJoon (๋งฅ์ฃผ ๋ง์๋ฉด์ ๊ฑธ์ด๊ฐ๊ธฐ, 9205๋ฒ) C++ (0) | 2022.01.13 |
---|---|
๋ฐฑ์ค BaekJoon (์์ ์์ญ, 2468๋ฒ) C++ (0) | 2022.01.12 |
๋ฐฑ์ค BaekJoon (์คํํธ๋งํฌ, 5014๋ฒ) C++ (0) | 2022.01.11 |
๋ฐฑ์ค BaekJoon (์คํํธ๋งํฌ, 5014๋ฒ) C++ (0) | 2022.01.11 |
๋ฐฑ์ค BaekJoon (์จ๋ฐ๊ผญ์ง, 1697๋ฒ) C++ (0) | 2022.01.11 |