- 오늘의 학습 키워드
섬의 개수
- 풀이
import java.util.Scanner;
public class Main {
static int w, h;
static int[][] map;
static boolean[][] visited;
// 8방향 (상, 하, 좌, 우 + 대각선)
static int[] dx = {-1, -1, -1, 0, 0, 1, 1, 1};
static int[] dy = {-1, 0, 1, -1, 1, -1, 0, 1};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
w = sc.nextInt();
h = sc.nextInt();
if (w == 0 && h == 0) break;
map = new int[h][w];
visited = new boolean[h][w];
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
map[i][j] = sc.nextInt();
}
}
int count = 0;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (map[i][j] == 1 && !visited[i][j]) {
DFS(i, j);
count++;
}
}
}
System.out.println(count);
}
}
private static void DFS(int x, int y) {
visited[x][y] = true;
for (int i = 0; i < 8; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && ny >= 0 && nx < h && ny < w) {
if (map[nx][ny] == 1 && !visited[nx][ny]) {
DFS(nx, ny);
}
}
}
}
}
- 오늘의 회고
지도 전체를 돌면서 아직 방문하지 않은 땅(1)을 발견하면 DFS를 시작하고, 연결된 모든 땅을 방문 처리한 뒤 섬의 개수를 증가시키는 방식으로 구현했다.
상하좌우뿐 아니라 대각선까지 연결되는 경우까지 해서 방향 배열을 8개 만든 다음 탐색!
확실히 4개, 8개 좌표는 외워 두는 게 좋을 듯 하댜
'📝 끄적끄적 > 항해99 코테 스터디' 카테고리의 다른 글
99클럽 코테 스터디 10일차 TIL + 병든 나이트 (0) | 2025.04.12 |
---|---|
99클럽 코테 스터디 9일차 TIL + 저울 (0) | 2025.04.10 |
99클럽 코테 스터디 8일차 TIL + 한국이 그리울 땐 서버에 접속하지 (0) | 2025.04.10 |
99클럽 코테 스터디 7일차 TIL + 쇠막대기 (0) | 2025.04.09 |
99클럽 코테 스터디 2일차 TIL + 피보나치 비스무리한 수열 (0) | 2025.04.02 |
99클럽 코테 스터디 1일차 TIL + 소수 구하기 (0) | 2025.04.01 |