#include <iostream>
#include <string>
#include <queue>
#include <algorithm>
using namespace std;
#define X first
#define Y second
int board[302][302]={0};
int vis[302][302];
int day[302][302];
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int cnt=0;
//입력
int n,m;
cin >> n >> m;
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
cin >> board[i][j];
}
}
//초기화
for(int i=0; i<n; i++) fill(vis[i],vis[i]+m,-1);
while(cnt<2) {
cnt=0;
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
//주변에 물이 얼마나 있는지 확인
if(board[i][j]==0 || vis[i][j]==-1) continue;
if(board[i][j]>0) {
vis[i][j]=0;
queue<pair<int,int>> q;
q.push({i,j});
while(!q.empty()) {
pair<int,int> cur=q.front(); q.pop();
for(int idx=0; idx<4; idx++) {
int nx=cur.X+dx[idx];
int ny=cur.Y+dy[idx];
if(nx<0 || nx>=n || ny<0 || ny>=m) continue;
//주변이 물이면 현재 위치에 있는 물 +1
if(board[nx][ny]==0) vis[cur.X][cur.Y]+=1;
}
}
}
if(board[i][j]==0) continue;
cnt++;
queue<pair<int,int>> Q;
Q.push({i,j});
while(!Q.empty()) {
pair<int,int> cur=q.front(); q.pop();
for(int idx=0; idx<4; idx++) {
int nx=cur.X+dx[idx];
int ny=cur.Y+dy[idx];
if(nx<0 || nx>=n || ny<0 || ny>=m) continue;
//빙산은 잇는데 안들림
if(board[nx][ny]>0 || day[nx][ny]==0) {
day[nx][ny]=day[cur.X][cur.Y]+1;
int x=board[nx][ny]-vis[nx][ny];
if(x<0) board[nx][ny]=0;
else board[nx][ny]=x;
Q.push({i,j});
}
}
}
}
}
}
피드뱍좀 해줘
To embed this project on your website, copy the following code and paste it into your website's HTML: