백준 14503번 c++ : 로봇 청소기

Rena·2022년 12월 26일

알고리즘 문제풀이

목록 보기
35/45
#include <bits/stdc++.h>
using namespace std;

int n,m,r,c,d;
int board[51][51];
int dx[4] = {-1,0,1,0}; //북,동,남,서
int dy[4] = {0,1,0,-1};

int main(void){ 
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m >> r >> c >> d;
    for(int i=0; i<n; i++) {
        for(int j=0; j<m; j++) {
            cin >> board[i][j];
        }
    }

    //r,c 청소기의 좌표
    while(true) {
        //1. 현재 위치를 청소한다
        if(board[r][c]==0) board[r][c] = -1;
        //2. 왼쪽 방향에 청소하지 않은 공간으로 회전
        bool clean = false;
        for(int i=0; i<4; i++) {
            d = (d+3) % 4; 
            if(board[r+dx[d]][c+dy[d]]==0) {
                r += dx[d];
                c += dy[d];
                clean = true;
                break;
            }
        }
        //네 방향 모두가 청소가 되어있거나 벽인 경우
        if(!clean) {
            if(board[r-dx[d]][c-dy[d]]!=1) { 
                //벽만 아니면 후진
                r -= dx[d];
                c -= dy[d];
            } else break;
        }
    }

    int cnt = 0;
    for(int i=0; i<n; i++) {
        for(int j=0; j<m; j++) {
            if(board[i][j]==-1) cnt++;
        }
    }

    cout << cnt;
}
profile
일을 사랑하고 싶은 개발자

0개의 댓글