Notice
Recent Posts
Recent Comments
Link
민스씨의 일취일장
Java | 백준 2667 단지번호 붙이기 본문
반응형
백준 2667 단지번호 붙이기 문제에 대한 글입니다.
백준 2667 단지번호 붙이기
내용
문제 내용은 아래 링크에서 확인할 수 있습니다.
2667번: 단지번호붙이기
<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여
www.acmicpc.net
풀이 전략
전형적인 DFS 문제이다. 단지 내 집들의 수를 마지막에 정렬해서 출력해야 하기 때문에 정렬이 간단한 List를 이용했다.
전체코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class baekjoon2667 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static int N, count;
static char[][] map;
static int[] varX = {1, 0, -1, 0};
static int[] varY = {0, 1, 0, -1};
static List<Integer> list = new ArrayList<>();
static void input() throws IOException{
N = Integer.parseInt(br.readLine());
map = new char[N][N];
for(int i=0; i<N; i++){
String str = br.readLine();
for(int j=0; j<N; j++){
map[i][j] = str.charAt(j);
}
}
}
static void execute(){
int numOfDanji =0;
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
if(map[i][j]=='1'){
count=0;
dfs(i, j);
numOfDanji++;
list.add(count);
count=0;
}
}
}
System.out.println(numOfDanji);
}
static void dfs(int x, int y){
if(map[x][y]=='0') return;
count++;
map[x][y] = '0';
for(int i=0; i<4; i++){
int newX = x + varX[i];
int newY = y + varY[i];
if(newX<0 || newY<0 || newX>=N || newY>=N) continue;
if(map[newX][newY]=='0') continue;
dfs(newX, newY);
}
}
public static void main(String[] args) throws IOException {
input();
execute();
Collections.sort(list);
for(int n : list){
System.out.println(n);
}
}
}
728x90
반응형
'Data Structure & Algorithm > Java' 카테고리의 다른 글
Java | 백준 11057 오르막 수 (0) | 2024.02.09 |
---|---|
Java | 백준 11724 연결 요소의 개수 (0) | 2024.02.08 |
Java | 백준 26169 세 번 이내에 사과를 먹자 문제풀이 및 분석 (0) | 2024.02.08 |
Java | 백준 1388 바닥 장식 문제풀이 및 분석 (0) | 2024.02.07 |
Java | 백준 13300 방배정 풀이 전략 기록 (0) | 2023.08.09 |