ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 14503번 : 로봇 청소기 (C언어)
    c c++ 언어 공부 2023. 3. 20. 00:06

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

     

    14503번: 로봇 청소기

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

    www.acmicpc.net

    Code:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    #include <stdio.h>
     
    int main(void) {
        int n, m;
        scanf("%d %d"&n, &m);
        int arr[51][51= { 0, };
        int r, c, d;
        scanf("%d %d %d"&r, &c, &d);
        int i, j;
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < m; j++)
            {
                scanf("%d"&arr[i][j]);
            }
        }
        while (1)
        {
            if (arr[r][c] == 0)
            {
                arr[r][c] = 2;
            }
            if (d == 0)
            {
                if (arr[r-1][c] != 0 && arr[r+1][c] != 0 && arr[r][c-1!= 0 && arr[r][c+1!= 0)
                {
                    if (arr[r + 1][c] == 1)
                    {
                        break;
                    }
                    r += 1;
                }
                else
                {
                    d = 3;
                    if (arr[r][c - 1== 0)
                    {
                        c -= 1;
                    }
                }
            }
            else if (d == 1)
            {
                if (arr[r - 1][c] != 0 && arr[r + 1][c] != 0 && arr[r][c - 1!= 0 && arr[r][c + 1!= 0)
                {
                    if (arr[r][c - 1== 1)
                    {
                        break;
                    }
                    c -= 1;
                }
                else
                {
                    d = 0;
                    if (arr[r - 1][c] == 0)
                    {
                        r -= 1;
                    }
                }
            }
            else if (d == 2)
            {
                if (arr[r - 1][c] != 0 && arr[r + 1][c] != 0 && arr[r][c - 1!= 0 && arr[r][c + 1!= 0)
                {
                    if (arr[r - 1][c] == 1)
                    {
                        break;
                    }
                    r -= 1;
                }
                else
                {
                    d = 1;
                    if (arr[r][c + 1== 0)
                    {
                        c += 1;
                    }
                }
            }
            else if (d == 3)
            {
                if (arr[r - 1][c] != 0 && arr[r + 1][c] != 0 && arr[r][c - 1!= 0 && arr[r][c + 1!= 0)
                {
                    if (arr[r][c + 1== 1)
                    {
                        break;
                    }
                    c += 1;
                }
                else
                {
                    d = 2;
                    if (arr[r + 1][c] == 0)
                    {
                        r += 1;
                    }
                }
            }        
        }
        int count = 0;
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < m; j++)
            {
                if (arr[i][j] == 2)
                {
                    count++;
                }
            }
        }
        printf("%d", count);
    }
    cs

    문제 풀이 :

    간단하게 할 수 있는 구현문제이다.

    1. 동 서 남 북을 입력으로 받으므로 경우의 수를 크게 4가지로 나누었다.

    2. 그 다음 주변 4칸이 청소되지않은 빈칸이 없는 경우와 4칸 중 청소되지않은 빈칸이 있는 경우로 나누었다.

    3. 문제에 있는 조건에 따라서 구현한다.

     

Designed by Tistory.