반응형
3190번: 뱀
'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임
www.acmicpc.net
알고리즘 종류
구현
사고 과정
뱀의 몸을 저장하기 위해서 deque으로 배열을 만들어 줍니다.
뱀의 움직임을 저장할 배열 rotate를 만들어 줍니다.
1. 뱀이 움직일 시간이면 방향을 바꿔줍니다.
2. 머리를 움직여 봅니다. 그리고 아래 조건으로 확인합니다.
2-1. 끝? 범위 밖 또는 자신의 몸과 부딪혔는지 확인합니다.
2-2. 사과? 사과가 있으면, 몸을 늘려줍니다. 사과가 없으면 꼬리 부분을 비웁니다.
구현(C++)
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
|
#include <iostream>
#include <deque>
using namespace std;
int n, k, l;
int mat[101][101];
char rotate[10001];
int dir[4][2] = {{1,0}, {0,1}, {-1,0}, {0,-1}};
bool isValid(int y, int x){
return (y>=1 && y<=n) && (x>=1 && x<=n);
}
void solution(){
deque<pair<int, int> > dq;
dq.push_back({1,1});
mat[1][1] = 2;
int d = 1;
int t = 0;
while(true){
// change direction
if(rotate[t] == 'D'){
if(d==0) d=3;
else if(d==3) d=2;
else if(d==2) d=1;
else if(d==1) d=0;
}
else if(rotate[t] == 'L'){
if(d==0) d=1;
else if(d==1) d=2;
else if(d==2) d=3;
else if(d==3) d=0;
}
int ny = dq.front().first + dir[d][0];
int nx = dq.front().second + dir[d][1];
// end
if(!isValid(ny, nx) || mat[ny][nx] == 2) {
cout << t + 1 << endl;
return;
}
// apple?
if(mat[ny][nx] == 3){
dq.push_front({ny, nx});
mat[ny][nx] = 2;
}
else{
dq.push_front({ny, nx});
mat[ny][nx] = 2;
mat[dq.back().first][dq.back().second] = 0;
dq.pop_back();
}
t++;
}
}
int main(void){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
cin >> k;
int y, x;
for(int i=0; i<k; i++){
cin >> y >> x;
mat[y][x] = 3;
}
cin >> l;
int s;
char c;
for(int i=0; i<l; i++){
cin >> s >> c;
rotate[s] = c;
}
solution();
}
|
cs |
시행착오
반응형
'코딩 공부 > 백준' 카테고리의 다른 글
[백준][C++] 2422 한윤정이 이탈리에 가서 아이스트림을 사먹는데 (0) | 2021.04.15 |
---|---|
[백준][C++] 14499 주사위 굴리기 (0) | 2021.04.11 |
[백준][C++] 1414 불우이웃돕기 (0) | 2021.04.11 |
[백준][C++] 1368 물대기 (0) | 2021.04.11 |
[백준][C++] 12100 2048 (Easy) (0) | 2021.04.10 |