[BOJ 2667] 단지번호붙이기
1. 문제 : Link
좌표에서 연결된 부분 찾기
2. 풀이
dfs, bfs를 이용한 풀이
3. 코드
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int[][] map;
static boolean[][] visited;
static int N;
static int[] dx = {0,0,1,-1};
static int[] dy = {1,-1,0,0,};
static int room;
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(bf.readLine());
map = new int[N][N];
visited = new boolean[N][N];
for(int i=0; i<N; i++){
String[] str = bf.readLine().split("");
for(int j=0; j<N; j++){
map[i][j] = Integer.parseInt(str[j]);
}
}
List<Integer> li = new ArrayList<>();
int cnt = 0;
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
if(!visited[i][j] && map[i][j] != 0){
room = 0;
dfs(i,j);
cnt++;
li.add(room);
}
}
}
Collections.sort(li);
System.out.println(cnt);
for(int i=0; i<li.size(); i++){
System.out.println(li.get(i));
}
}
public static void dfs(int i, int j){
visited[i][j] = true;
room++;
for(int k=0; k<4; k++){
int nx = i+dx[k];
int ny = j+dy[k];
if(nx<0 || ny<0 || nx>=N || ny>=N) continue;
if(visited[nx][ny]) continue;
if(map[nx][ny] == 0) continue;
dfs(nx,ny);
}
}
}
'💻 Coding Problems Solving > DFS | BFS | Backtracking' 카테고리의 다른 글
[BOJ 1303] 전쟁-전투 (0) | 2022.07.04 |
---|---|
[BOJ 1260] DFS와 BFS (0) | 2022.07.01 |
[BOJ 17070] 파이프 옮기기1 (java) (0) | 2022.07.01 |
[BOJ 14888] 연산자 끼워넣기 (0) | 2022.06.25 |
[프로그래머스] LV.2 타겟 넘버 (0) | 2022.04.08 |
최근댓글