본문 바로가기

알고리즘/백준

[백준/C++] 알고리즘 1405번 - 로봇 청소기

안녕하세요! 테크지니어22입니다.

오늘은 백준 알고리즘 1405번 - 로봇 청소기를 풀어보도록 하겠습니다.

 

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

 

14503번: 로봇 청소기

첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$  둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽

www.acmicpc.net

 

[문제 접근]

이 문제는 특별한 자료구조나 알고리즘 개념이 포함된 것이 아니고, 문제에 나와있는 데로 구현하면 됩니다.

 

[풀이 전략]

생략

 

[코드]

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


int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
int n, m ;
int arr[51][51]; // 방 상태
int tot ; 
int x,y,d ; 

bool isExisted() {
    for(int i = 0 ; i < 4 ; i++){
        int nx = x + dx[i];
        int ny = y + dy[i];
        if(nx >= n-1 || nx <= 0 || ny >= m-1 || ny <= 0) continue;
        if(arr[nx][ny] == 0) return true; // 빈칸 존재하면 
    }
    return false;
}


int main() {
  ios::sync_with_stdio(0);
    cin.tie(0); 
    cin >> n >> m ;
    cin >> x >> y >> d ;
    
    for(int i = 0 ; i < n ; i++)
        for(int j = 0 ; j < m ; j++)
            cin >> arr[i][j];
    
    while (true)
    {
        if(arr[x][y] == 0) arr[x][y] = -1;
        if(!isExisted()) { // 빈칸 없음

        int nx = x + dx[(d+2)%4];
        int ny = y + dy[(d+2)%4];
        if(arr[nx][ny] == 1) break;

        x = nx ; y = ny;

        } else { // 빈칸 있음
        d = (d+3)%4;
        int nx = x + dx[d];
        int ny = y + dy[d];

        if(arr[nx][ny] == 0) { x = nx; y =ny ; }
        }

    }

    for(int i = 0 ; i < n ; i++)
        for(int j = 0 ; j < m ; j++)
            if(arr[i][j] == -1) tot++;
    cout << tot ;
}

 

[배울 점]

- 틀렸을 때 변수 업데이트를 제대로 해주었는지, 디버깅출력문을 삭제를 했는지 확인하기.