Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 후기
- 필기후기
- CSS
- 부스트코스
- 연결요소의개수
- java
- 웹
- 수박수박수박수박수?
- 한국재정정보원
- 프로그래밍언어
- 백준
- HTML
- 웹개발
- 중소기업면접
- 인강
- 필기
- 확인문제
- BOJ
- 농은면접
- 프로그래밍
- 프로그래머스
- 정수내림차순으로배치하기
- algorithm
- Linux
- 알고리즘
- 이클립스
- 건보필기
- 웹프로그래밍
- 코딩
- 공부
Archives
- Today
- Total
공부하는 히욤이
[BOJ] 2667. 단지번호붙이기 본문
BaekJoon 2667. 단지번호붙이기
* 문제의 저작권은 BOJ 및 문제를 만든 사람에게 있습니다.
[문제 접근]
오랜만에 다시 BFS로 풀어 봤다.
지난번과 비슷하게 푼 것 같은데 이번에는 if문 끝나고 while문을 돌려서 cnt 값이 계속 들어 갔다.
그래서 cnt가 0이 아닐 때만 list에 넣어 줬다.
while문을 if문 안에 넣어주면 if(!cnt = 0) 조건문을 따로 해줄 필요 없이 그냥 list에 cnt를 넣어주면 된다.
전에 BFS랑 DFS로 푼 것도 기록해놓은게 있으니 DFS 풀이 방법은 여기서 참고 !
2019/08/22 - [Algorithm/BaekJoon] - [BOJ] 2667. 단지번호붙이기
[코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[][] map = new int[N][N]; //아파트 단지
boolean[][] visit = new boolean[N][N]; //방문 배열
for (int i = 0; i < N; i++) {
String s = br.readLine();
for (int j = 0; j < N; j++) {
map[i][j] = Integer.parseInt(s.charAt(j)+"");
}
}
int cnt = 0;
ArrayList<Integer> list = new ArrayList<>();
Queue<Cord> queue = new LinkedList<>();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (map[i][j] == 1 && !visit[i][j]) {
queue.add(new Cord(i, j));
cnt++;
visit[i][j] = true;
}
while (!queue.isEmpty()) {
Cord temp = queue.poll();
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, -1, 0, 1};
for (int k = 0; k < 4; k++) {
int nx = temp.x + dx[k];
int ny = temp.y + dy[k];
if (nx >= 0 && nx < N && ny >=0 && ny < N) {
if (map[nx][ny] == 1 && !visit[nx][ny]) {
queue.add(new Cord(nx, ny));
visit[nx][ny] = true;
cnt++;
}
}
}
}
if (cnt != 0) {
list.add(cnt);
cnt = 0;
}
}
}
Collections.sort(list);
System.out.println(list.size());
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
static class Cord{
int x;
int y;
public Cord(int x, int y) {
this.x = x;
this.y = y;
}
}
}
'Algorithm > BaekJoon' 카테고리의 다른 글
[BOJ] 1012. 유기농 배추 (0) | 2020.04.11 |
---|---|
[BOJ] 11724. 연결 요소의 개수 (0) | 2020.04.11 |
[BOJ] 7576. 토마토 (0) | 2020.04.11 |
[BOJ] 1592. 영식이와 친구들 (0) | 2020.04.10 |
[BOJ] 6588. 골드바흐의 추측 (0) | 2020.02.13 |