- ์ด ๋ฌธ์ ๋ c++๋ก ํ์ด๋ฅผ ์์ฑํ์ต๋๋ค.
๋ฌธ์
์์
ํ์ด
#include<iostream>
using namespace std;
int r,c,t;
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int result=0;
bool inside(int y,int x){
return 0<=y && y<r && 0<=x && x<c;
}
void diffusion(int arr[50][50]){
int row;
// ์ฒซ ๋ฏธ์ธ๋จผ์ง ์์ row
for(int i=0;i<r;i++){
if(arr[i][0]==-1){
row=i;
break;
}
}
for(int j=row-1;j>0;j--){
arr[j][0]=arr[j-1][0];
}
for(int j=0;j<c-1;j++){
arr[0][j]=arr[0][j+1];
}
for(int j=0;j<row;j++){
arr[j][c-1]=arr[j+1][c-1];
}
for(int j=c-1;j>1;j--){
arr[row][j]=arr[row][j-1];
}
arr[row][1]=0;
row++;
for(int j=row+1;j<r-1;j++){
arr[j][0]=arr[j+1][0];
}
for(int j=0;j<c-1;j++){
arr[r-1][j]=arr[r-1][j+1];
}
for(int j=r-1;j>row;j--){
arr[j][c-1]=arr[j-1][c-1];
}
for(int j=c-1;j>1;j--){
arr[row][j]=arr[row][j-1];
}
arr[row][1]=0;
}
int main(){
int arr[50][50];
cin>>r>>c>>t;
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
cin>>arr[i][j];
}
}
for(int test=1;test<=t;test++){
// ํ์ฐ๋๋ ๋ฏธ์ธ๋จผ์ง ์
int temp[50][50]={0};
for(int y=0;y<r;y++){
for(int x=0;x<c;x++){
if(arr[y][x]>0){
int cnt=0;
int num=arr[y][x]/5;
// ์ํ์ข์ฐ ํ์
for(int k=0;k<4;k++){
int dy=y+dir[k][0];
int dx=x+dir[k][1];
if(inside(dy,dx)){
if(arr[dy][dx]!=-1){
cnt++;
temp[dy][dx]+=num; // ํ์ฐ ๋ฏธ์ธ๋จผ์ง ์ ์ถ๊ฐ
}
}
}
arr[y][x]-=(num*cnt); // ๋ฏธ์ธ๋จผ์ง ์ ์ค์ด๊ธฐ
}
}
}
// ์๋ ๋ฏธ์ธ๋จผ์ง + ํ์ฐ ๋ฏธ์ธ๋จผ์ง
for(int y=0;y<r;y++){
for(int x=0;x<c;x++){
arr[y][x]+=temp[y][x];
}
}
// ๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์์
diffusion(arr);
}
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
if(arr[i][j]>0){
result+=arr[i][j];
}
}
}
cout<<result;
}
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์์ ํ ๋ถ๋ถ์ด ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์.