Seize your moment! ๐Ÿ‘พ

์•ˆ๋…•ํ•˜์„ธ์š”. Eric์ž…๋‹ˆ๋‹ค. ์ œ ๋ธ”๋กœ๊ทธ์— ๋ฐฉ๋ฌธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ๊ฐœ๋ฐœ๊ณต๋ถ€/Algorithm

[Eric's ๋ฐฑ์ค€] 2667๋ฒˆ - ๋‹จ์ง€๋ฒˆํ˜ธ ๋ถ™์ด๊ธฐ - Java ๐Ÿฏ

Eric_ko 2023. 2. 25. 09:28

๋ฌธ์ œ

์•ˆ๋…•ํ•˜์„ธ์š”! Eric ์ž…๋‹ˆ๋‹ค

์˜ค๋Š˜ ํ’€์–ด๋ณผ ๋ฌธ์ œ๋Š”

๋ฐฑ์ค€ 2667๋ฒˆ ๋‹จ์ง€๋ฒˆํ˜ธ ๋ถ™์ด๊ธฐ ์ž…๋‹ˆ๋‹ค

์ด๋ฒˆ ๋ฌธ์ œ๋Š” dfs๋กœ ํ’€์–ด๋ณด๋„๋ก ํ•˜์ฃ .

 

ํ’€์ด

 

์šฐ์„  ๋‹จ์ง€๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€ ๊ตฌํ•ด์•ผํ•˜๊ณ ,

๊ฐ๊ฐ์˜ ๋‹จ์ง€๋‹น, ๋ช‡๊ฐœ์˜ ๊ฐ€๊ตฌ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ๊ตฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ์—๋„ ์ €๋Š” boolean[] graph ๊ฐ’์œผ๋กœ ๋ฐ›์•„์„œ

๋‹จ์ง€๊ฐ€ ์žˆ๋Š” 1 ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„์€ true ๊ฐ’์œผ๋กœ graph๋ฅผ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  graph ์—์„œ true๊ฐ’์„ ๋งŒ๋งˆ๋ฉด

์ƒํ•˜์ขŒ์šฐ๋ฅผ dfs๋ฅผ ๋Œ๋ฉด์„œ

๊ฐ๊ฐ์˜ ๋‹จ์ง€์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ์Œ๊ณผ ๋™์‹œ์—, ํ•ด๋‹น graph ์œ„์น˜๋ฅผ false๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ค๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์˜ ๋‹จ์ง€ ๊ฐœ์ˆ˜๋ฅผ count ํ•ด์ค„ ArrayList๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹น๊ฐ’์„ ์ €์žฅํ•˜๊ณ 

์ด๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ ํ›„ ์ถœ๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ฝ”๋“œ๋ฅผ ๋ณด์‹œ์ฃ .

 

์ฝ”๋“œ

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
class N2667 {
static boolean[][] graph;
static int n, countDanji;
static int max = 25 + 10; // ๋ฌธ์ œ์—์„œ ์ง€๋„์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๊ฐ€ 25 ์ด๋ฏ€๋กœ ๊ฑฐ๊ธฐ์— ๋„‰๋„‰ํ•˜๊ฒŒ 10 ์„ ์ถ”๊ฐ€ํ•ด์„œ ์ง„ํ–‰ใ…œ
static int[] dirX = {0, 0, 1, -1};
static int[] dirY = {1, -1, 0, 0};
/**
* ํ•œ๋ฒˆ ์ฒ˜๋ฆฌํ•œ ์•„ํŒŒํŠธ๋ฅผ 0์œผ๋กœ ์ง€์›Œ์ฃผ๋ฉด ๋˜๋ฏ€๋กœ visited ์“ธ ํ•„์š”๊ฐ€ ์—†์Œ
* */
public static void main(String[] args) throws IOException {
// 0. ์ž…๋ ฅ ๋ฐ ์ดˆ๊ธฐํ™”
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
graph = new boolean[max][max];
for (int i = 1; i <= n; i++) {
String s = br.readLine();
for (int j = 1; j <= n; j++) {
graph[i][j] = s.charAt(j - 1) == '1';
}
}
// 1. (1,1) ๋ถ€ํ„ฐ (n , n) ๊นŒ์ง€ ๋Œ๋ฉด์„œ dfs
ArrayList<Integer> countList = new ArrayList<>();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (graph[i][j]) {
countDanji = 0;
dfs(i, j);
countList.add(countDanji);
}
}
}
// 2. ์ถœ๋ ฅ
System.out.println(countList.size());
Collections.sort(countList);
for (int x : countList) {
System.out.println(x);
}
br.close();
}
public static void dfs(int x, int y) {
graph[x][y] = false;
countDanji++;
for (int i = 0; i < 4; i++) {
int cx = x + dirX[i];
int cy = y + dirY[i];
if (graph[cx][cy]) {
dfs(cx, cy);
}
}
}
}
view raw N2667.java hosted with โค by GitHub