일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래머스
- dfs
- set
- map
- 부스트코스
- 카카오 공채
- 알고리즘
- 2020 카카오 공채
- 2018 카카오
- 자바
- 2018 KAKAO BLIND RECRUITMENT
- 카카오
- 삼성 SW 역량테스트
- 2019 카카오 공채
- 비트마스크
- bfs
- 2019 카카오 개발자 겨울 인턴십 코딩테스트
- gcp
- 2019 KAKAO BLIND RECRUITMENT
- Baekjoon
- c++
- 백준
- 젠킨스
- 삼성 SW 기출문제
- CS 스터디
- gradle
- 2018 카카오 공채
- 2020 KAKAO BLIND RECRUITMENT
- Java
- 2018 KAKAO BLIND RECRUITMENT 1차
Archives
- Today
- Total
아무코딩
[백준 3190] 뱀 본문
문제풀이
간단한 시뮬레이션 문제 . 명령이후에는 쭉 직진이다. 이부분을 고려해주는게 함정(?)인것 같기도하고.. 문제 읽으면서 생각했다면 크게 어려울 것 없는 문제다
소스코드
더보기
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
|
#include <stdio.h>
#include <queue>
#include <stdlib.h>
#define APPLE 2
#define SNAKE 1
using namespace std;
typedef struct Snake {
int row;
int col;
Snake(int r, int c) {
row = r;
col = c;
}
}Snake;
queue<Snake> snake;
int N;//보드크기
int K;//사과개수
int n_turn;
int Map[101][101];
int dir=0;
int dir_row[4] = {0,1,0,-1};
int dir_col[4] = {1,0,-1,0};
int total_sec=0;
void MoveSnake(int second);
int main() {
int row, col, sec;
char turn;
scanf("%d", &N);
scanf("%d", &K);
for (int i = 0; i < K; i++) {
scanf("%d %d", &row, &col);
Map[row][col] = 2;//사과는 2
}
Map[1][1] = 1;
scanf("%d", &n_turn);
for (int i = 0; i <n_turn; i++) {
scanf("%d %c", &sec, &turn);
MoveSnake(sec-total_sec);
switch (turn) {
case 'L':
dir = (dir + 3) % 4;
break;
case 'D':
dir = (dir + 1) % 4;
break;
}
}
MoveSnake(100000);//이후 쭉직진
}
void MoveSnake(int second) {
int next_row, next_col;
for (int i = 0; i < second; i++) {
total_sec++;
if (next_row<1 || next_col<1 || next_row>N || next_col>N) {
printf("%d", total_sec);
exit(0);
}
else if(Map[next_row][next_col] == APPLE) {
Map[next_row][next_col] = SNAKE;
}
else if (Map[next_row][next_col] == SNAKE) {
printf("%d", total_sec);
exit(0);
}
else if (Map[next_row][next_col] == 0) {
Map[next_row][next_col] = 1;
Map[snake.front().row][snake.front().col] = 0;
snake.pop();
}
//맵 출력해보기
/*printf("\nsec :%d\n",total_sec);
for (int k = 1; k <=N; k++) {
for (int j = 1; j <=N; j++) {
printf("%d ", Map[k][j]);
}
printf("\n");
}*/
}
}
|
문제 링크 : https://www.acmicpc.net/problem/3190
3190번: 뱀
문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따
www.acmicpc.net
'알고리즘 > 백준' 카테고리의 다른 글
[백준 2573] 빙산 (0) | 2020.04.27 |
---|---|
[백준 11559] Puyo Puyo (0) | 2020.04.25 |
[백준 14891] 톱니바퀴 (0) | 2020.04.21 |
[백준 1991] 트리 순회 (0) | 2020.04.17 |
[백준 1806] 부분합 (0) | 2020.04.17 |
Comments