-
[백준]3190. 뱀 (Java)알고리즘/백준 2021. 8. 30. 21:44
💡 문제 분석
/** * 1. 뱀이 위치하고 있는 칸들을 덱에 저장시켜놓고 * 2. 뱀이 움직이는 과정을 진행한다, 머리가 몸에 닿으면 종료 */
⌨️ 코드
JAVA
import java.util.Deque; import java.util.LinkedList; import java.util.Scanner; public class Q3190 { static int N, K, L, d = 0, cnt = 0; static int[][] map; static char[] turn = new char[10001]; static int[] dy = {0, 1, 0, -1}, dx = {1, 0, -1, 0}; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); K = sc.nextInt(); map = new int[N][N]; for (int i = 0; i < K; i++) { int y = sc.nextInt(); int x = sc.nextInt(); map[y - 1][x - 1] = 4; } L = sc.nextInt(); for (int i = 0; i < L; i++) turn[sc.nextInt()] = sc.next().charAt(0); Deque<Point> snake = new LinkedList<>(); snake.add(new Point(0, 0)); map[0][0] = 1; while (true) { cnt++; Point cur = snake.peekLast(); Point next = new Point(cur.y + dy[d], cur.x + dx[d]); if (next.y < 0 || next.x < 0 || next.y >= N || next.x >= N || map[next.y][next.x] == 1) break; if (map[next.y][next.x] != 4) { Point tail = snake.pollFirst(); map[tail.y][tail.x] = 0; } snake.add(next); map[next.y][next.x] = 1; if((int)turn[cnt] != 0) { if(turn[cnt] == 'D') { d++; if(d == 4) d = 0; } else if(turn[cnt] == 'L') { d--; if(d == -1) d = 3; } } } System.out.println(cnt); } static class Point { int y, x; public Point(int y, int x) { this.y = y; this.x = x; } } }
'알고리즘 > 백준' 카테고리의 다른 글
[백준]2636. 치즈 (Java) (0) 2021.08.30 [백준]2631. 줄세우기 (Java) (0) 2021.08.30 [백준]1916. 최소 비용 구하기 (Java) (0) 2021.08.23 [백준]2023. 신기한 소수 (Java) (0) 2021.08.23 [백준]1915. 가장 큰 정사각형 (Java) (0) 2021.08.23