사과는 : 1, 그냥길은 :0
* 주의할점 *
1. 뱀이 사과를 먹으면 Board의 1(사과) 을 0으로 바꿔줘야한다.
2. X초가 끝난 뒤에 (뱀이 움직이고 난 후) 방향을 움직여아한다
3. for문을 통해 자기자신과 만났는지 확인하고 break로 전체 while문을 빠져나와야 한다
뱀의 길이와 위치를 알기위해 snake 큐를 만들었다
q에 이동할 곳을 넣어주고 만약 사과를 먹었다면 Board의 사과만 0으로 없애주고
만약 사과를 먹지 않았다면 큐를 삭제하여 제일 이전에 들어온 큐를 제거하는 방법을 사용했다.
(1.1 에서 1.2로 이동했는데 사과가 없으면 처음에 들어온 1.1을 삭제)
아래 주석안 코드를 통해 매 시간마다 뱀의 위치와 사과의 위치를 볼 수 있습니다
import java.util.*;
public class B3190 {
static int N,A,T; //NxN, Apple , Turn
static int count =0;
static int dir =1;
static int[][] Board;
static Map<Integer,String> turn = new HashMap<>();
static int[][] D = {{-1,0},{0,1},{1,0},{0,-1}}; //상우하좌 시계방향
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
A = sc.nextInt();
Board = new int[N][N];
int[][] apple = new int[A][2];
for(int i=0; i<A; i++){
apple[i][0] = sc.nextInt();
apple[i][1] = sc.nextInt();
}
T = sc.nextInt();
for(int i=0; i<T; i++){
turn.put(sc.nextInt(), sc.next());
}
for (int[] ints : apple) {
Board[ints[0]-1][ints[1]-1] = 1;
}
move();
System.out.println(count);
}
private static void move() {
Node node = new Node(0,0);
Queue<int[]> snake = new LinkedList<>();
snake.add(new int[]{0,0});
Loop1:
while(true){
if(turn.get(count)!=null){
if(Objects.equals(turn.get(count), "D")){
if(dir==3){
dir =0;
}else{
dir +=1;
}
}else{
if(dir==0){
dir =3;
}else{
dir -=1;
}
}
}
count += 1;
int nr = node.row+D[dir][0];
int nc = node.col+D[dir][1];
if(nr<0||nr>=N||nc<0||nc>=N) break;
for (int[] ints : snake) {
if(nr==ints[0] && nc==ints[1]) break Loop1;
}
if(Board[nr][nc]==1){
snake.add(new int[]{nr,nc});
Board[nr][nc]=0;
}else{
snake.add(new int[]{nr,nc});
snake.remove();
}
node.row = nr;
node.col = nc;
/*
System.out.println("======= c: "+count+", l: "+len+"=======");
for (int[] ints : snake) {
System.out.println(Arrays.toString(ints));
}
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
System.out.print(Board[i][j]+" ");
}
System.out.println("");
}
*/
}
}
private static class Node {
int row,col;
Node(int r, int c){
row = r;
col = c;
}
}
}
'연습문제 > JAVA' 카테고리의 다른 글
1717-집합의 표현 (오답) (0) | 2022.08.24 |
---|---|
[백준 java] 5430 - AC (0) | 2022.08.23 |
[백준 java] 9012-괄호 (0) | 2022.08.20 |
[백준 java] 3197-백조의 호수 (0) | 2022.08.18 |
[백준 java] 2669-직사각형 네개의 합집합의 면적 구하기 (0) | 2022.08.17 |