본문 바로가기
Algorithm

[백준 14503] 로봇 청소기

by YEON-DU 2020. 8. 23.
반응형

https://www.acmicpc.net/problem/14503

 

14503번: 로봇 청소기

로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어

www.acmicpc.net

#include <iostream>
#include <queue>
using namespace std;

// 로봇 청소기

typedef pair<int, int> point;
int N, M;
point dir[4] = {{-1,0}, {0,1}, {1,0}, {0,-1}};
point back[4] = {{1,0}, {0,-1}, {-1,0}, {0,1}};

int house[51][51];
int answer;
int R, C, D;

void solve(int r, int c, int d) {
    
    if(house[r][c] == 1) return;
    
    if(house[r][c] == 0) {
        house[r][c] = 2;
        answer++;
    }
    
    int cur = d;
    for(int i = 0; i<4; i++) {
        int next = (cur - 1);
        if(next < 0) next = 3;
        
        int rr = r + dir[next].first;
        int cc = c + dir[next].second;
        
        if(house[rr][cc] == 0) {
            solve(rr, cc, next);
            return;
        }
        else
            cur = next;
    }
    
    int br = r + back[d].first;
    int bc = c + back[d].second;
    
    solve(br, bc, d);
}

int main() {
    
    cin >> N >> M;
    cin >> R >> C >> D;
    
    for(int i = 0; i<N; i++)
        for(int j = 0; j<M; j++)
            cin >> house[i][j];
   
    solve(R, C, D);

    cout << answer << endl;
    return 0;
}
반응형

'Algorithm' 카테고리의 다른 글

git commit 수정하기 관련  (0) 2020.08.30
[백준 17144] 미세먼지 안녕!  (0) 2020.08.24
[백준 16000] 섬  (0) 2020.08.08
[백준 19236] 청소년 상어  (0) 2020.07.30
[백준 12025] 장난꾸러기 영훈  (0) 2020.07.26

댓글