๋ฌธ์

์๋ ํ์ธ์! 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); | |
} | |
} | |
} | |
} |

'๐ป ๊ฐ๋ฐ๊ณต๋ถ > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Eric's ๋ฐฑ์ค] 3046๋ฒ - R2 - Python (0) | 2024.03.13 |
---|---|
[Eric's ๋ฐฑ์ค] 1012๋ฒ - ์ ๊ธฐ๋๋ฐฐ์ถ ๐ฅฌ - Java (0) | 2023.02.24 |
[Eric's ๋ฐฑ์ค] 7569๋ฒ - ํ ๋งํ - Java ๐ ๐ (2) | 2023.02.17 |
[Eric's ๋ฐฑ์ค] 7576๋ฒ - ํ ๋งํ - Java ๐ (3) | 2023.02.17 |
[Eric's ๋ฐฑ์ค] 9020๋ฒ - ๊ณจ๋๋ฐํ์ ์ถ์ธก - Java (0) | 2023.02.16 |