-
[백준] 2667 단지번호 붙이기#JAVAAlgorithm Solving/BAEKJOON 2020. 12. 14. 22:22
BAEKJOON [2667] 단지번호붙이기
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Queue; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n; n = Integer.parseInt(br.readLine()); int[] dx = {0,1,0,-1}; int[] dy = {1,0,-1,0}; char[][] nemo = new char[n][n]; boolean[][] vis= new boolean[n][n]; int count =0; int size = 0; List<Integer> list = new ArrayList<Integer>(); Queue<int[]> queue = new LinkedList<int[]>(); //data for (int i = 0; i < n; i++) { String input = br.readLine(); for (int j = 0; j < n; j++) { nemo[i][j] = input.charAt(j); } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if(nemo[i][j] == '1' && !vis[i][j]) { queue.add(new int[]{i,j}); vis[i][j] = true; count++; size++; } while (!queue.isEmpty()) { int[] temp = queue.poll(); for (int k = 0; k < 4; k++) { int nx = temp[0] + dx[k]; int ny = temp[1] + dy[k]; if(nx<0 || ny <0 || nx >=n ||ny >=n ) continue; if(vis[nx][ny]) continue; if(nemo[nx][ny] == '0') continue; size++; queue.add(new int[] {nx,ny}); vis[nx][ny] = true; } } if(size>0) { list.add(size); size = 0; } } } System.out.println(count); //list = list.stream().sorted().collect(Collectors.toList()); //정렬 Collections.sort(list); for (int num : list) { System.out.println(num); } } }
풀이
- BFS
- 이 문제는 list를 정렬 후 출력하는 문제다. 문제 잘 읽자.
잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)
'Algorithm Solving > BAEKJOON' 카테고리의 다른 글
[백준] 10026 적록색약 #JAVA (0) 2020.12.17 [백준] 7562 나이트의 이동 #JAVA (0) 2020.12.16 [백준] 2583 영역 구하기#JAVA (0) 2020.12.13 [백준] 1012 유기농배추 #JAVA (0) 2020.12.11 [백준] 1697 숨바꼭질 #JAVA (0) 2020.12.10