우선 입력으로 양의 정수 N, M이 입력됩니다. N은 행의 개수, M은 열의 개수입니다. N <= 10, M <= 10입니다. 이후, N행, 각 행마다 M열 개 만큼의 0 혹은 1이 입력됩니다. 이들은 N행, M열 2차원지도를 채우는 값들입니다. 앞서 말한대로 0은 바다, 1은 땅입니다. 섬의 개수를 출력할 때, 줄 끝에 줄바꿈 문자는 없습니다.
힌트:
2차원 정수배열 [10][10]을 미리 만들어놓습니다. 그리고, N, M을 입력받아서, 해당 부분만 사용하면 됩니다. 문제를 풀기 위해서는 recursion을 이용하면 됩니다. 각 위치에서 (i,j)가 땅(1)이면, 상,하,좌,우 위치에 대해서 recursion 함수를 호출하면 됩니다. 그리고 recursion 함수에서, (i,j) 위치를 방문했다고 표시해 두면 됩니다. Recursion이 모두 끝나면, 하나의 섬에 대해서, 섬에 해당되는 영역들은 모두 방문되었다고 표시가 되었을 겁니다. 이러한 기록을 위해서 지도 외에 방문 여부를 표시하는 2차원 정수배열을 하나 더 만들어 두어야 합니다. Recursion 함수를 호출할 때, 위치 (i,j) 외에, 최대 경계 (row, column)값도 함께 인수로 전달하면 경계 파악이 쉬울 겁니다.
입력은 다음과 같이 받으면 됩니다.
int r, c; int maza[10][10]={0,}; // 전역변수로 선언 scanf("%d %d", &r, &c); for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { scanf("%d", &maze[i][j]); } }