링크 https://www.acmicpc.net/problem/14503
시뮬레이션 문제이다. 필자는 회전에 대한 구현이 있을 때, 하드코딩을 통헤 dir 변수로 1부터 4까지 if문을 사용하여 해결하지만 이제부터는 반복문을 사용하여 방향을 저장하고 있는 변수를 통해 접근하여 나머지 연산자로 구현을 하려고한다..
[위 : 0] [오른쪽 : 1] [아래 : 2] [왼쪽 : 3] 으로 생각하여 항상 시계방향으로 나타낸다. x,y 값이 있기때문에 방향을 담는 자료를 dx[4], dy[4] 에 위의 인덱스에 이동할 값으로 넣어준다.
왼쪽방향으로 회전하기때문에 +3 %4 으로 처리하면 되고 오른쪽이라면 +1 % 4 180도는 +2 % 4 로 처리하면 방향을 쉽게 처리할 수 있다.
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
|
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include<string>
#include<math.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<set>
#include<iterator>
#include<deque>
#include<sstream>
using namespace std;
int n, m, arr[51][51],sx,sy,dir,visit[51][51],cnt=1;
int dx[4] = { -1,0,1,0 }, dy[4] = { 0,1,0,-1 },kx,ky;
int main()
{
cin >> n >> m;
cin >> sx >> sy >> dir;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%d", &arr[i][j]);
}
}
arr[sx][sy] = 2;
while(1) {
int cchk = 0,bp=0;
for (int i = 0; i < 4; i++) {
dir = (dir + 3) % 4;
kx = sx + dx[dir];
ky = sy + dy[dir];
//cout << kx << " " << ky << " " << dir << endl;
if (arr[kx][ky] != 0 ) {
//cout << "방문이미 벽" << endl;
continue;
}
if (kx >= 0 && kx < n && ky >= 0 && ky < m && arr[kx][ky] == 0) {
//cout << "이동 입장" << endl;
//cout << kx << " " << ky << " " << dir << endl;
sx = kx, sy = ky;
cnt++;
arr[sx][sy] = cnt;
cchk = 1;
//cout << kx << " " << ky << " " << dir << endl;
break;
}
}
if (cchk == 0) {
//cout << dir << " ";
if (dir == 0) {
sx++;
}
if (dir == 1) {
sy--;
}
if (dir == 2) {
sx--;
}
if (dir == 3) {
sy++;
}
if (arr[sx][sy] == 1) {
//cout << a << endl;
break;
}
}
}
//for (int i = 0; i < n; i++) {
//for (int j = 0; j < m; j++) {
//printf("%2d ", arr[i][j]);
//}
//printf("\n");
//}
cout << cnt;
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'알고리즘 > 삼성 SW역량테스트' 카테고리의 다른 글
백준[17142] 연구소 3 (add. 연구소 2) (0) | 2019.10.22 |
---|---|
백준[17140] 이차원 배열과 연산 (0) | 2019.10.15 |
백준[14499] 주사위 굴리기 (0) | 2019.08.23 |
백준[3190] 뱀 (0) | 2019.07.07 |
백준 [16234] 인구이동 (0) | 2019.03.16 |