반응형
이전에 풀었던 1926: 그림 문제를 참고하여 풀었습니다,
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
int[] dx = new int[]{1, 0 ,-1, 0};
int[] dy = new int[]{0, -1, 0, 1};
for (int i=0; i<T; i++){
int[] in = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int M = in[0], N = in[1], K = in[2];
int[][] field = new int[N][M];
boolean[][] visited = new boolean[N][M];
for (int j=0; j<K; j++){
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
field[y][x] = 1;
}
int result = 0;
for (int j=0; j<N; j++){
for (int k=0; k<M; k++){
if (field[j][k] == 0 || visited[j][k]) continue;
result++;
ArrayList<int[]> Q = new ArrayList<>();
Q.add(new int[]{j, k});
while(!Q.isEmpty()){
int[] cur = Q.remove(0);
for (int dir=0; dir<4; dir++){
int nx = cur[1] + dx[dir];
int ny = cur[0] + dy[dir];
if (nx<0 || nx>=M || ny<0 || ny>=N) continue;
if (visited[ny][nx] || field[ny][nx]!=1) continue;
visited[ny][nx] = true;
Q.add(new int[]{ny, nx});
}
}
}
}
sb.append(result+"\n");
}
System.out.print(sb);
}
}
반응형
'Algorithm' 카테고리의 다른 글
백준 9466번 텀 프로젝트 [ Java ] (0) | 2021.01.01 |
---|---|
백준 7569번 토마토 [ Java ] (0) | 2021.01.01 |
백준 1697번 숨바꼭질 [ Java ] (0) | 2020.12.31 |
백준 4179번 불! [ Java ] (0) | 2020.12.31 |
백준 11656번 접미사 배열 [ Java ] (0) | 2020.12.30 |