티스토리 뷰
https://www.acmicpc.net/problem/14503
로봇 청소기의 작동 방식에 따라 적절히 재귀함수를 구현한다. 방향 전환과 상태 표시 등에 주의하자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include <cstdio> int n,m,map[50][50],r,c,d,ans; int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1}; // 북동남서 bool valid(int r,int c) { return r>=0 && r<n && c>=0 && c<m; } void go(int r,int c,int d) { if(map[r][c]==0) map[r][c]=-1,ans++; for(int i=0;i<4;i++) { d?d--:d=3; int nx=r+dx[d],ny=c+dy[d]; if(valid(nx,ny) && map[nx][ny]==0) { go(nx,ny,d); return; } } int b=d<=1?d+2:d-2; int nx=r+dx[b],ny=c+dy[b]; if(valid(nx,ny) && map[nx][ny]==-1) go(nx,ny,d); } int main() { scanf("%d %d",&n,&m); scanf("%d %d %d",&r,&c,&d); for(int i=0;i<n;i++) for(int j=0;j<m;j++) scanf("%d",&map[i][j]); go(r,c,d); printf("%d\n",ans); return 0; } | cs |
'Algorithm > BOJ' 카테고리의 다른 글
14889 스타트와 링크 (0) | 2018.04.09 |
---|---|
14888 연산자 끼워넣기 (0) | 2018.04.09 |
14502 연구소 (0) | 2018.04.09 |
14501 퇴사 (0) | 2018.04.06 |
14499 주사위 굴리기 (0) | 2018.04.06 |