• 문제 링크
3190번: 뱀
'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임
www.acmicpc.net
• 풀이 과정
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
public class Main {
static int n;
static int[][] board;
static Map<Integer, String> comm = new HashMap<>();
static int[] dy = { 0, 1, 0, -1 };
static int[] dx = { 1, 0, -1, 0 };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
n = Integer.parseInt(br.readLine());
int k = Integer.parseInt(br.readLine());
board = new int[n][n];
for (int i = 0; i < k; i++) {
st = new StringTokenizer(br.readLine());
board[Integer.parseInt(st.nextToken()) - 1][Integer.parseInt(st.nextToken()) - 1] = 1;
}
int l = Integer.parseInt(br.readLine());
for (int i = 0; i < l; i++) {
st = new StringTokenizer(br.readLine());
comm.put(Integer.parseInt(st.nextToken()), st.nextToken());
}
bw.write(dummy(0, 0, 0) + "\n");
bw.flush();
}
private static int dummy(int y, int x, int dir) {
List<int[]> snake = new LinkedList<>();
snake.add(new int[] { 0, 0 });
int sec = 0;
while (true) {
sec++;
int ny = y + dy[dir];
int nx = x + dx[dir];
if (ny < 0 || nx < 0 || ny >= n || nx >= n)
break;
for (int i = 0; i < snake.size(); i++) {
if (ny == snake.get(i)[0] && nx == snake.get(i)[1])
return sec;
}
if (board[ny][nx] == 1) {
board[ny][nx] = 0;
snake.add(new int[] { ny, nx });
} else {
snake.add(new int[] { ny, nx });
snake.remove(0);
}
y = ny;
x = nx;
if (comm.containsKey(sec)) {
if (comm.get(sec).equals("D")) {
dir++;
if (dir == 4)
dir = 0;
} else if (comm.get(sec).equals("L")) {
dir--;
if (dir == -1)
dir = 3;
}
}
}
return sec;
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 16234 인구 이동 - Implementation / Java (0) | 2022.06.29 |
---|---|
[백준] 14891 톱니바퀴 - Implementation / Java (0) | 2022.06.28 |
[백준] 14890 경사로 - Implementation / Java (0) | 2022.06.26 |
[백준] 14503 로봇 청소기 - Implementation / Java (0) | 2022.06.25 |
[백준] 16113 시그널 - Implementation / Java (0) | 2022.06.24 |
댓글