[c++] 백준 14503: 로봇청소기

다미·2022년 9월 22일
0

백준

목록 보기
8/15
post-thumbnail

14503번: 로봇 청소기

문제

코드

/**
 * baekjoon - 14503
 * implemenntation, simulation
 */

#include <iostream>
#include <cstring>
#define fio ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;

int n, m, r, c, d;
int arr[50][50] = {-1, };
int cnt = 0;
int tryChange = 0;

void sol(){
    while(1){
        if (arr[r][c] == 0){
            arr[r][c] = 2;
            //cout <<"(" << r << ", "<<c<<")"<<endl;
            cnt++;
        }
        if (tryChange == 4){
            switch (d)
            {
            case 0:
                r++;
                break;
            case 1:
                c--;
                break;
            case 2:
                r--;
                break;
            case 3:
                c++;
                break;
            default:
                break;
            }

            tryChange = 0;
            if (arr[r][c] == 1) break;
        }

        if (d == 0){
            d = 3;
            if (arr[r][c-1] == 0){
                c--;
                tryChange = 0;
            }
            else {
                tryChange++;
            }

            continue;
        }

        if (d == 1){
            d = 0;
            if (arr[r-1][c] == 0){
                r--;
                tryChange = 0;
            }
            else {
                tryChange++;
            }

            continue;
        }

        if (d == 2){
            d = 1;
            if (arr[r][c+1] == 0){
                c++;
                tryChange = 0;
            }
            else {
                tryChange++;
            }

            continue;
        }

        if (d == 3){
            d = 2;
            if (arr[r+1][c] == 0){
                r++;
                tryChange = 0;
            }
            else {
                tryChange++;
            }

            continue;
        }
    }
}

int main(){
    //input
    fio;
    for (int i = 0; i <= 51; i++){
        memset(arr, -1, sizeof(arr[i]));
    }
    cin >> n >> m;
    cin >> r >> c >> d;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            cin >> arr[i][j];
        }
    }

    //sol
    sol();
    cout << cnt;

    return 0;
}

해설

로봇 청소기가 바라보는 방향을 기준으로 왼쪽방향으로 차례대로 탐색을 진행하는데, 해당 문제에 주어진 경우를 순서대로 구현해주면 된다.

0개의 댓글