티스토리 뷰
https://www.acmicpc.net/problem/3190
3190번: 뱀
문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따
www.acmicpc.net
#include<iostream>
#include<vector>
#include<queue>
#include<utility>
#include<map>
using namespace std;
vector<vector<int>> sMap;
int direct[4][2] = { {0,1},{1,0},{0,-1},{-1,0} }; //동, 남, 서, 북 ***
int N, K, L, result = 0; //맵크기, 사과갯수, 명령갯수, 결과
int main(void) {
//N*N map을 모두 0으로 초기화
cin >> N;
for (int i = 0; i < N; i++) {
vector<int> temp;
for (int j = 0; j < N; j++)
temp.push_back(0);
sMap.push_back(temp);
}
//사과의 위치 초기화 (map상에 4로 초기화 사과의 4 ㅋㅋㅋㅋ)
cin >> K;
for (int i = 0; i < K; i++) {
int x, y;
cin >> x >> y;
sMap[x - 1][y - 1] = 4;
}
//뱀의 초기 상태 0, 0 방향은 동쪽 = 0
queue<pair<int, int>> snack;
snack.push(make_pair(0, 0));
sMap[snack.back().first][snack.back().second] = 1; //맵에 표시
int moveD = 0; //방향
//명령 입력 = 맵에 입력해서 초마다 방향전환 명령을 찾는 방식
map<int, char> Order;
cin >> L;
for (int i = 0; i < L; i++) {
int sec;
char dir;
cin >> sec >> dir;
Order[sec] = dir;
}
//solution~~~
while (1) {
result++;
int x = snack.back().first + direct[moveD][0];
int y = snack.back().second + direct[moveD][1];
//맵 안에서 움직이는지, 몸과 부딪히지 않았는지 --> 종료조건!!
if (0 <= x && x < N && 0 <= y && y < N && sMap[x][y] != 1) {
//일단 이동
snack.push(make_pair(x, y));
//사과가 없으면 길이 줄이기
if (sMap[x][y] != 4) {
sMap[snack.front().first][snack.front().second] = 0; //맵에서 뱀 꼬리 지우고
snack.pop(); //꼬리 댕기고~
}
//이동한 위치에 표시
sMap[x][y] = 1;
}
else {
cout << result << endl;
return 0;
}
//방향 회전
if (Order.find(result) != Order.end()) {
if (Order[result] == 'D')
moveD = (moveD + 1) % 4;
if (Order[result] == 'L')
moveD = (moveD + 3) % 4;
}
}
}
'Algorithm > 유형별 : simulation' 카테고리의 다른 글
[C++] [Simulation] 백준 1018번 : 체스판 다시 칠하기 (0) | 2019.11.14 |
---|---|
[C++] [Simulation] 백준 14499번 : 주사위 굴리기 (0) | 2019.11.14 |
[C++] [Simulation] 백준 14503번 : 로봇 청소기 (0) | 2019.11.14 |
[C++] [Simulation] 백준 1966번 : 프린터 큐 (0) | 2019.11.14 |
[C++] [Simulation] 백준 1094번 : 막대기 (0) | 2019.11.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Delete
- 객체
- 추상화
- .
- controller
- model
- JdbcTemplate
- jdbc
- 객체지향
- MVC
- 다형성
- java 환경설정
- ojdbc6.jar
- view
- 상속
- 캡슐화
- JDBC 프로그램 작성단계
- Update
- Scott/Tiger
- Oracle
- INSERT
- java
- OOP
- select
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함