본문 바로가기
코딩/문제풀이-백준

백준 14503번 - 로봇 청소기 (C++)

by 남대현 2021. 4. 9.
반응형

문제

 

해결 방법

게임 몬스터 자동 이동 프로그래밍 하듯, 그냥 시키는대로 코딩하면 된다. 객체가 하나여서 재귀를 사용하였다.

 

아쉬웠던 점

두번째 if문과 while문의 내용이 비슷해서 하나로 어찌 잘 묶어볼 수 있었을 것 같은데, 쓸대없이 길어진 것 같아서 아쉽다.

 

코드

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
#include <iostream>
using namespace std;
 
void Move(int _Map[][50], int _Y, int _X, int _Z, int *_Count)
{
    if (_Map[_Y][_X] == 0)
    {
        _Map[_Y][_X] = 3;
        ++*_Count;
    }
 
    if (_Map[_Y - 1][_X] && _Map[_Y + 1][_X] && _Map[_Y][_X - 1&& _Map[_Y][_X + 1])
    {
        int iX = _X, iY = _Y;
        switch (_Z)
        {
        case 0//북
            iY = _Y + 1;
            break;
        case 1//동
            iX = _X - 1;
            break;
        case 2//남
            iY = _Y - 1;
            break;
        case 3//서
            iX = _X + 1;
            break;
        default:
            break;
        }
 
        if (_Map[iY][iX] == 1)
            return;
        else
        {
            Move(_Map, iY, iX, _Z, _Count);
            return;
        }
    }
 
    while (true)
    {
        int iX = _X, iY = _Y;
        switch (_Z)
        {
        case 0//북
            _Z = 3;
            --iX;
            break;
        case 1//동
            _Z = 0;
            --iY;
            break;
        case 2//남
            ++iX;
            _Z = 1;
            break;
        case 3//서
            ++iY;
            _Z = 2;
            break;
        default:
            break;
        }
 
        if (_Map[iY][iX] == 0)
        {
            Move(_Map, iY, iX, _Z, _Count);
            break;
        }
    }
}
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    int a, s, d, f, g, ans = 0//순서대로 세로, 가로, 좌표y, 좌표x, 방향, 정답
    int XY[50][50= {};
    cin >> a >> s >> d >> f >> g;
 
    for (int i = 0; i < a; ++i)
    {
        for (int j = 0; j < s; ++j)
        {
            int q;
            cin >> q;
            XY[i][j] = q;
        }
    }
 
    Move(XY, d, f, g, &ans);
 
    cout << ans;
}
cs

코드 진행은 문제 그대로라서 딱히 적을게 없다.

 

잡설 : 좌표 순서는 귀찮게 왜 (Y,X)로 한걸까..

반응형

댓글