자바로 알고리즘 문제를 풀고 있는데 ArrayIndexOutOfBoundsException 에러가 납니다.
조회수 2917회
백준 온라인 저지에서 문제 풀고있는데 답이 안나옵니다... C로 코딩했을때는 에러가 안나는데 자바로만 하면 if(arr[x][y-1] == 1 && y-1 >= 0) 줄에서 java.lang.ArrayIndexOutOfBoundsException 에러가 납니다... 왜 나는지 이유는 알겠는데 어떻게 해결해야 할지 모르겠네요...
고수님들 답변 부탁드립니다.
package baekjun;
import java.util.Scanner;
public class problem6{
static int M,N,K;
static int[][] arr;
static int[][] visited;
static int testcase;
public static void main(String[] args){
int myX = 0;
int myY = 0;
Scanner sc = new Scanner(System.in);
testcase = sc.nextInt();
M = sc.nextInt();
N = sc.nextInt();
K = sc.nextInt();
arr = new int[M][N];
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = 0;
}
}
for(int k = 0; k<testcase; k++) {
int count = 0;
for (int i = 0; i < K; i++){
myX = sc.nextInt();
myY = sc.nextInt();
arr[myX][myY] = 1;
}
for(int i = 0; i<M; i++) {
for (int j = 0; j<N; j++) {
if(arr[i][j] == 1) {
DFS(i, j);
count++;
}
}
}
System.out.println(count);
}
}
static void DFS(int x, int y){
arr[x][y] = 0;
if(arr[x+1][y] == 1 && x+1 < M)
DFS(x+1, y);
if(arr[x][y+1] == 1 && y+1 < N)
DFS(x, y+1);
if(arr[x-1][y] == 1 && x-1 >= 0)
DFS(x-1, y);
if(arr[x][y-1] == 1 && y-1 >= 0)
DFS(x, y-1);
}
}
}
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
if(arr[x][y-1] == 1 && y-1 >= 0)
를
if(y-1 >= 0 && arr[x][y-1] == 1)
으로 바꾸세요.
논리연산은 동시에 하는 것이 아니라 앞의 문장 부터 차례대로 실행합니다. 다음 문장을 실행하는 것은 다음을 따릅니다.
- 논리곱 - AND(&&) 의 경우, 앞의 결과나 False가 되면 그 뒤의 문장은 실행하지 않습니다.
- 이는 논리적으로 A && B && C 라고 할 때, A가 false이면 B, C의 결과와 상관없이 전체 결과가 false이기 때문입니다. 따라서, B와 C를 확인할 필요가 없습니다.
- 논리합 - OR(||)의 경우는, 앞의 결과가 True가 되면 그 뒤의 문장은 실행하지 않습니다.
- 논리합은 A || B || C 라고 할 때, A가 true이면, B와 C의 결과와 상관없이 전체 결과는 true가 됩니다. 따라서 B, C는 확인할 필요가 없습니다.
- 논리곱 - AND(&&) 의 경우, 앞의 결과나 False가 되면 그 뒤의 문장은 실행하지 않습니다.
댓글 입력