static int L; static int N; static int[][] map; static int[][] isvisited; static int[] second; static char[] direct;
public static void main(String[] args){ Scanner scan = new Scanner(System.in); L = scan.nextInt(); map = new int[2*L+1][2*L+1]; isvisited = new int[2*L+1][2*L+1];
N = scan.nextInt(); second = new int[N]; direct = new char[N];
pji3016 7년 전
테스트 케이스는 전부 맞습니다.
런타임에러 해결방법을 모르겠습니다.ㅠㅠ 도와주세요.
import java.util.Scanner;
public class _7_10875_Sneak {
static int L;
static int N;
static int[][] map;
static int[][] isvisited;
static int[] second;
static char[] direct;
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
L = scan.nextInt();
map = new int[2*L+1][2*L+1];
isvisited = new int[2*L+1][2*L+1];
N = scan.nextInt();
second = new int[N];
direct = new char[N];
for(int i=0; i<N; i++){
if(i == 0) second[i] = scan.nextInt();
else second[i] = scan.nextInt() + second[i-1];
direct[i] = scan.next().charAt(0);
}
int start_x = L; // 시작점
int start_y = L; // 시작점
int direction = 3; // 초기 방향 - 오른쪽
solve(start_x, start_y, direction);
System.out.println(time + 1);
}
/* L R
왼쪽(1) 4 2
위(2) 1 3
오른쪽(3) 2 4
아래(4) 3 1
*/
static int counter = 0; // 0 ~ N-1
static int[] dx = {-1, 0, 1, 0};
static int[] dy = {0, 1, 0, -1};
static int time = 0;
private static void solve(int start_x, int start_y, int direction){
isvisited[start_x][start_y] = 1;
if(time != second[counter]){
start_x += dx[direction-1];
start_y += dy[direction-1];
if(start_x<0 || start_y<0 || start_x>2*L || start_y>2*L) return;
if(isvisited[start_x][start_y] == 1) return;
time += 1;
solve(start_x, start_y, direction);
}else if(time == second[counter]){
if(direction == 1){
direction = direct[counter] == 'L' ? 4 : 2;
}else if(direction == 2){
direction = direct[counter] == 'L' ? 1 : 3;
}else if(direction == 3){
direction = direct[counter] == 'L' ? 2 : 4;
}else if(direction == 4){
direction = direct[counter] == 'L' ? 3 : 1;
}
start_x += dx[direction-1];
start_y += dy[direction-1];
if(start_x<0 || start_y<0 || start_x>2*L || start_y>2*L) return;
if(isvisited[start_x][start_y] == 1) return;
if(counter<N) counter += 1;
time += 1;
solve(start_x, start_y, direction);
}
}
}