monsterfairy2   6년 전

import java.util.*;

class Main{
static int[][] a;
public static void dfs(int[][] a, int i, int j,int count){

if(a[i][j]==0){
return ;
}
int[] x = {-1,1,0,0,-1,-1,1,1};
int[] y = {0,0,-1,1,1,-1,1,-1};
a[i][j]=0;
for(int k = 0; k < 8 ; k++){
if(i+x[k]>=0 &&i+x[k]<a.length&& j+y[k]>=0&&j+y[k]<a[0].length &&a[i+x[k]][j+y[k]]!=0){
dfs(a, i+x[k],j+y[k],count);
}
}

}

public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n=1;
int m=1;
while(n!=0&&m!=0){

n = sc.nextInt();
m = sc.nextInt();
if(n==0&&m==0){
return;
}
a = new int[n][m+1];

for(int i = 0; i < m ; i ++){
for(int j = 0 ; j < n ; j++){
a[i][j] = sc.nextInt();
}
}
int count=1;

for(int i = 0 ; i<m; i++){
for(int j = 0 ; j < n ; j++){
if(a[i][j]!=0)
dfs(a ,i ,j ,count++);
}
}
/*
5 4
1 0 1 0 0
1 0 0 0 0
1 0 1 0 1
1 0 0 1 0
0 0
*/ System.out.println(count-1);
}
}
}

djm03178   6년 전

a = new int[n][m+1]; 인데,

for(int i = 0; i < m ; i ++){
for(int j = 0 ; j < n ; j++){
a[i][j] = sc.nextInt();
}
}

는 a[m - 1][n - 1]까지 갑니다. m이 n보다 크다면 문제가 됩니다.

monsterfairy2   6년 전

와 이거 어떻게 찾으셨나요 저는 몇시간 걸렸는데도 못찾았어요 ...

에러났을때 해결방법조언좀 듣고싶습니다

djm03178   6년 전

우선은 에러가 어디서 나는지를 찾아야겠죠. 다양한 특성의 테스트 케이스들을 넣어보다보면 대개는 스스로도 찾을 수 있습니다.
만약 예시를 찾기가 힘들다면, 전형적으로 런타임 에러를 발생시키는 원인들을 쭉 고려해봐야 됩니다. 지금과 같이 다차원 배열의 앞뒤를 뒤집어 쓰는 경우도 흔하고, 메모리 크기를 부족하게 잡았거나, 문제에서 주어진 것을 초과할 수도 있고요. 또는 배열에 접근할 인덱스의 값이 음수가 되거나 예상을 뛰어넘어갈 수도 있습니다.
디버깅 코드를 곳곳에 넣어서, 모든 변수의 값과 프로그램의 실행 흐름이 자신이 의도한 대로 매 순간마다 흘러가고 있는지 확인해 보는 것이 좋습니다.

댓글을 작성하려면 로그인해야 합니다.