반응형
import java.util.*;
class TimeInfo {
private int time;
private char direction;
public TimeInfo (int time, char direction) {
this.time = time;
this.direction = direction;
}
public int getTime() {
return this.time;
}
public char getDirection() {
return this.direction;
}
}
class Snake {
private int x;
private int y;
public Snake(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
}
class Main {
public static int n, k, l;
public static int[][] map = new int[101][101];
// 시간에 따른 턴 정보
public static List<TimeInfo> list = new ArrayList<>();
// 뱀이 위치하는 칸 정보
public static Queue<Snake> s = new LinkedList<>();
// 방향 정보 동 남 서 북
public static int[] dx = {0, 1, 0, -1};
public static int[] dy = {1, 0, -1, 0};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
k = sc.nextInt();
for (int i = 0; i < k; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
// 사과 위치 정보 입력
map[x][y] = 1;
}
l = sc.nextInt();
for (int i = 0; i < l; i++) {
int t = sc.nextInt();
char d = sc.next().charAt(0);
list.add(new TimeInfo(t, d));
}
// 뱀은 맵 안에서만 움직인다. 자신을 만나면 멈춘다.
int direction = 0; // 방향값
int result = 0; // 시간
int index = 0; // list 읽어오는 시간정보에대해서
int x = 1, y = 1;
map[x][y] = 2; // 뱀 있는 자리 2
s.offer(new Snake(x,y));
while (true) {
TimeInfo info = list.get(index);
int nx = x + dx[direction];
int ny = y + dy[direction];
result++;
if (1 <= nx && nx <= n && 1 <= ny && ny <= n
&& map[nx][ny] != 2){
// 가려는 자리가 범위 안에 있고 뱀 꼬리도 아닐 때
// 그곳에 사과가 있다면?
if (map[nx][ny] != 1) {
// 꼬리가 0이 되어야 하는데...?
Snake tail = s.poll();
map[tail.getX()][tail.getY()] = 0;
}
map[nx][ny] = 2;
x = nx;
y = ny;
s.offer(new Snake(x,y));
} else {
// 가려는 곳이 못가는 곳 일 때,
break;
}
// 턴 해야할 때...
if (result == info.getTime()) {
if (info.getDirection() == 'L') {
// 왼쪽
direction = (direction == 0) ? 3 : direction - 1;
} else {
direction = (direction == 3) ? 0 : direction + 1;
}
// index가 l (주어진 타임정보 넘어서면 안됨)
index++;
if (index == l) {
index = 0;
}
}
}
System.out.println(result);
} // end main
}
구현문제 같다.
뱀의 정보는 꼬리부터 머리까지 큐로 구현했다. (사과를 못 먹으면 꼬리가 사라져야함.)
천천히 하나하나 필요한 것을 구현하면서 진행했다.
처음에 굉장히 길을 못잡았는데, 기능을 정리하면서 구현하니까 풀어졌다.
그리고 중간에 오타는 항상 문제다.
'Algorithm' 카테고리의 다른 글
[Algorithm] 볼링공 고르기 (0) | 2021.06.02 |
---|---|
[Algorithm] 문자열 뒤집기 (0) | 2021.06.01 |
[Algorithm] 곱하기 혹은 더하기 (0) | 2021.05.31 |
[Algorithm] 모험가 길드 (0) | 2021.05.30 |
[Algorithm] 커리큘럼 (0) | 2021.05.29 |