- ์ด ๋ฌธ์ ๋ c++๋ก ํ์ด๋ฅผ ์์ฑํ์์ต๋๋ค
๋ฌธ์
์์
ํ์ด
#include <iostream>
#include <queue>
using namespace std;
int n,m;
int data[50][50];
int dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}}; // ๋ถ -> ์ -> ๋จ -> ๋
// ๋ฌด์กฐ๊ฑด ์ด ์์ (๋ถ์์ ์ผ์ชฝ ์ , ์์์ ์ผ์ชฝ ๋จ)
// ์ขํ๋ฅผ ๋ด๋ ๊ตฌ์กฐ์ฒด
struct node{
int x;
int y;
node(int y,int x):y(y),x(x){}
};
// ์ฌ๊ฐํ ์์ ์๋์ง ํ๋จํ๋ ํจ์
bool inside(int y,int x){
return 0<=y && y<n && 0<=x && x<m;
}
int main(){
int result=0;
cin>>n>>m;
int r,c,t;
cin>>r>>c>>t;
// ๋ฌธ์ ์ ๋ถ์๋จ๋๊ณผ dir๊ณผ ์์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ฒ์๋ง ์กฐ์
if(t==1 || t==3){t=(t+2)%4;}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>data[i][j];
}
}
int check[50][50]={0};
queue<node> q;
q.push(node(r,c));
result++;
check[r][c]=1;
// dfs๋ก ํ๋ ์ฒญ์๊ฐ ์๋ ๊ตฌ์ญ์ด ์์ผ๋ฉด break
while(1){
int y=q.front().y;
int x=q.front().x;
q.pop();
bool flag=false;
for(int cnt=1;cnt<=4;cnt++){
int d=(t+cnt)%4; // 0-> 1, 1-> 2, 2->3 ,3-> 0 ํ๊ธฐ ์ํด % ์ฌ์ฉ
int dy=y+dir[d][0];
int dx=x+dir[d][1];
if(inside(dy,dx)){
if(data[dy][dx]==0 && check[dy][dx]==0){ // ์ฒญ์๊ฐ ์๋๊ตฌ์ญ
flag=true;
q.push(node(dy,dx));
check[dy][dx]=1;
result++;
t=d;
break;
}
}
}
// ๋์๋จ๋ถ ๋ชจ๋ ์๋ ๊ฒฝ์ฐ ๋ค๋ก ํ์ง -> +2ํ ํ %4
if(!flag){
int d=(t+2)%4;
int dy=y+dir[d][0];
int dx=x+dir[d][1];
if(inside(dy,dx)){
if(data[dy][dx]!=1){
q.push(node(dy,dx));
}
else{break;}
}
else{
break;
}
}
}
cout<<result;
}
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์์ ํ ๋ถ๋ถ ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์.