본문 바로가기
IT/BOJ

백준(BOJ) 13458 로봇 청소기 **

by 빨강자몽 2019. 3. 20.

# 단순 구현


일단, 지문이 뭔가 모호한거같다...

나의 멍첨함에 경의를 표한다...


# 실수 했던 점....


바보.... 리얼 바보.... 왜 틀렸나했다....

시계 방향을 int dy[4]={1,0,-1,0},dx[4]={0,1,0,-1}; 이렇게 하고 풀었다.....

시계 방향은 int dy[4]={-1,0,1,0},dx[4]={0,1,0,-1}; 이게 맞다.....


#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <math.h>
#include <limits.h>
#include <string.h>
#include <string>
#include <sstream>
#define MAX 55
#define INF 2123456789

using namespace std;
typedef long long ll;

int n,m,y,x,d;
// 북,동,남,서(시계방향)
int dy[4]={-1,0,1,0},dx[4]={0,1,0,-1};
int map[MAX][MAX];


int main() {

    // 입력을 받아온다.
    scanf("%d%d",&n,&m);
    scanf("%d%d%d",&y,&x,&d);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            scanf("%d",&map[i][j]);

    int tf=1,cnt=0;
    while(tf)
    {
        if(!map[y][x])
            cnt++;
        map[y][x]=2;

        for(int i=0;i<5;i++)
        {
            // 4방향 모두 탐색하였을 때,
            if(i==4)
            {
                int ny = y+dy[(d+2)%4], nx = x+dx[(d+2)%4];
                // 뒤로 이동 가능 한 경우
                if (map[ny][nx] != 1) {
                    y = ny,x = nx;
                }
                // 뒤가 벽인 경우
                else
                    tf = 0;
                break;
            }
            // 회전 하면서 확인한다.
            d=(d+3)%4;
            int ny=y+dy[d],nx=x+dx[d];
            if(!map[ny][nx]) {
                y = ny, x = nx;
                break;
            }

        }
    }
    printf("%d",cnt);
    return 0;
}


'IT > BOJ' 카테고리의 다른 글

백준(BOJ) 14889 스타트와 링크 *  (0) 2019.03.22
백준(BOJ) 14888 연산자 끼워넣기 *  (0) 2019.03.21
백준(BOJ) 13458 시험 감독 *  (0) 2019.03.18
백준(BOJ) 2870 수학숙제 *  (0) 2019.03.17
백준(BOJ) 2667 단지번호붙이기 *  (0) 2019.03.14