-
[BaekJoon] ์ผ์ฑ sw ์ญ๋ ํ ์คํธ(๋ก๋ด ์ฒญ์๊ธฐ)SW Test/BaekJoon 2020. 4. 20. 00:14๋ฐ์ํ
- ์ด ๋ฌธ์ ๋ 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; }
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์์ ํ ๋ถ๋ถ ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์.
๋ฐ์ํ'SW Test > BaekJoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BaekJoon] ์ผ์ฑ sw ์ญ๋ ํ ์คํธ(ํฑ๋๋ฐํด) (0) 2020.04.21 [BaekJoon] ์ผ์ฑ sw ์ญ๋ ํ ์คํธ(์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ) (1) 2020.04.20 [BaekJoon] ์ผ์ฑ sw ์ญ๋ ํ ์คํธ(๋ฏธ์ธ๋จผ์ง ์๋ !) (2) 2020.04.19 [BaekJoon] ์ผ์ฑ sw ์ญ๋ ํ ์คํธ(๊ฒฝ์ฌ๋ก) (0) 2020.04.19 [Baekjoon] ์ผ์ฑ sw ์ญ๋ ํ ์คํธ(์ฐ๊ตฌ์) (0) 2020.04.19