

풀이
보드의 크기만큼 2차원 int배열을 만들어주고 먼저 사과의 좌표값들을 큐에 모두 넣어준다.
또 초를 담을 1차원 int 배열 하나와 그에 따라 명령어를 담아둘 1차원 char 배열을 하나 만들어 명령어를 다 넣어두었다. (스터디 후에 생각해보건대 class개념으로 대체하면 더 편할 것 같다.)
도착지점은 끝 모서리로 1로 표시해두었다. 이후 0, 0에서 시작하여 체크하며 지나가는데 해당 시간이 지나면 명령어를 받아 방향을 틀어주게 하였다.
또한 사과를 먹을때 뱀의 길이가 늘어나는 걸 이용하기 위해 queue에 이동한 좌표를 담아 사과를 먹었다면 그 위치를 다시 넣어줌으로써 길이를 유지하게 하였다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int K = Integer.parseInt(br.readLine());
int[][] board = new int[N][N];
StringTokenizer st;
for (int k = 0; k < K; k++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
board[x - 1][y - 1] = 1;
}
int L = Integer.parseInt(br.readLine());
int[] X = new int[L];
char[] C = new char[L];
for (int l = 0; l < L; l++) {
st = new StringTokenizer(br.readLine());
X[l] = Integer.parseInt(st.nextToken());
C[l] = st.nextToken().charAt(0);
}
int sx = 0;
int sy = 0;
int v = 0;
int cnt = 0;
int idx = 0;
int[] dx = { 0, 1, 0, -1 }; // 우하상좌
int[] dy = { 1, 0, -1, 0 };
Queue<Integer> queue = new LinkedList<Integer>();
board[sx][sy] = 2;
queue.offer(sx);
queue.offer(sy);
while (true) {
int nx = sx + dx[v];
int ny = sy + dy[v];
if (nx >= 0 && ny >= 0 && nx < N && ny < N && board[nx][ny] != 2) {
if (board[nx][ny] != 1) {
int fx = queue.poll();
int fy = queue.poll();
board[fx][fy] = 0;
}
board[nx][ny] = 2;
queue.offer(nx);
queue.offer(ny);
sx = nx;
sy = ny;
cnt++;
if (idx != L && cnt == X[idx]) {
if (C[idx] == 'D') {
v++;
if (v >= 4) // 0,1,2,3
v = 0;
} else if (C[idx] == 'L') {
v--;
if (v < 0) // 0,1,2,3
v = 3;
}
if (idx < L) // 인덱스 넘어가는거 방지
idx++;
}
} else {
break;
}
}
System.out.println(++cnt);
}
}
'Algo > 백준' 카테고리의 다른 글
4963: 섬의 개수 (그래프) (0) | 2021.02.19 |
---|---|
2573: 빙산 (구현) (0) | 2021.02.19 |
2564: 경비원 (구현) (0) | 2021.02.19 |
8911: 거북이 (구현) (0) | 2021.02.19 |
11060: 점프점프 (DP) - 실패 (0) | 2021.02.19 |