728x90
반응형
백준
https://www.acmicpc.net/problem/2667
- 오늘의 학습 키워드 : DFS
- 공부한 내용 본인의 언어로 정리하기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int N, house = 1;
static int[][] arr;
static boolean[][] visited;
static List<Integer> danzi;
static int[] dx = {0, 1, 0, -1};
static int[] dy = {1, 0, -1, 0};
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new int[N][N]; //지도
visited = new boolean[N][N]; //방문 노드 확인
danzi = new ArrayList<>();
for (int i=0; i<N; i++) {
String[] input = br.readLine().split("");
for (int j=0; j<N; j++) {
arr[i][j] = Integer.parseInt(input[j]);
}
}
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
//집이 있고, 방문하지 않은 곳에 dfs 진행
if (arr[i][j] == 1 && !visited[i][j]) {
dfs(i, j);
danzi.add(house); //단지 내 가구 수 저장
house = 1; //가구 수 1개로 초기화
}
}
}
//오름차순 정렬
Collections.sort(danzi);
StringBuilder sb = new StringBuilder();
sb.append(danzi.size()).append("\n"); //단지 수
for (int d : danzi) sb.append(d).append("\n"); //단지 내 가구 수
System.out.println(sb);
}
private static void dfs(int x, int y) {
visited[x][y] = true;
for (int i=0; i<4; i++) {
int a = x + dx[i];
int b = y + dy[i];
//상하좌우 움직일 수 있는 좌표고, 방문하지 않은 집인 경우
if (a >= 0 && b >= 0 && a < N && b < N &&
!visited[a][b] && arr[a][b] == 1) {
house++;
dfs(a, b);
}
}
}
}
- 오늘의 회고 : DFS 조금씩 익숙해지는 중!
99클럽 1기를 수강하면서 작성한 글입니다.
99클럽-1기 모집 중
현직 개발자와 함께하는 코테 스터디
99club.oopy.io
728x90
반응형
'Blog > Education' 카테고리의 다른 글
99클럽 코테 스터디 43일차 TIL + DFS (0) | 2024.05.06 |
---|---|
99클럽 코테 스터디 42일차 TIL + DFS (0) | 2024.05.05 |
99클럽 코테 스터디 40일차 TIL + BFS (0) | 2024.05.03 |
99클럽 코테 스터디 39일차 TIL + DFS, BFS (0) | 2024.05.02 |
99클럽 코테 스터디 38일차 TIL + stack (0) | 2024.05.01 |
댓글