반응형
문제
해결 방법
게임 몬스터 자동 이동 프로그래밍 하듯, 그냥 시키는대로 코딩하면 된다. 객체가 하나여서 재귀를 사용하였다.
아쉬웠던 점
두번째 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)로 한걸까..
반응형
'코딩 > 문제풀이-백준' 카테고리의 다른 글
백준 1584번 - 게임 (C++) (0) | 2021.05.05 |
---|---|
백준 1715번 - 카드 정렬하기 (C++) (0) | 2021.04.27 |
백준 1929번 - 소수 구하기 C++ (0) | 2021.04.08 |
백준 7562번 - 나이트의 이동 (C++) (0) | 2021.04.07 |
백준 2504번 - 괄호의 값 (C++) (0) | 2021.04.04 |
댓글