๊ทธ๋ฆผ ๐ช
์ด๋ค ํฐ ๋ํ์ง์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์์ ๋, ๊ทธ ๊ทธ๋ฆผ์ ๊ฐ์์, ๊ทธ ๊ทธ๋ฆผ ์ค ๋์ด๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด๋ผ๋ ๊ฒ์ 1๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ํ ๊ทธ๋ฆผ์ด๋ผ๊ณ ์ ์ํ์. ๊ฐ๋ก๋ ์ธ๋ก๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ์ฐ๊ฒฐ์ด ๋ ๊ฒ์ด๊ณ ๋๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ์ด ๋ ๊ฒ์ ๋จ์ด์ง ๊ทธ๋ฆผ์ด๋ค. ๊ทธ๋ฆผ์ ๋์ด๋ ๊ทธ๋ฆผ์ ํฌํจ๋ 1์ ๊ฐ์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ํ์ง์ ์ธ๋ก ํฌ๊ธฐ n(1 ≤ n ≤ 500)๊ณผ ๊ฐ๋ก ํฌ๊ธฐ m(1 ≤ m ≤ 500)์ด ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ n+1 ์ค ๊น์ง ๊ทธ๋ฆผ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. (๋จ ๊ทธ๋ฆผ์ ์ ๋ณด๋ 0๊ณผ 1์ด ๊ณต๋ฐฑ์ ๋๊ณ ์ฃผ์ด์ง๋ฉฐ, 0์ ์์น ์ด ์๋ ๋ถ๋ถ, 1์ ์์น ์ด ๋ ๋ถ๋ถ์ ์๋ฏธํ๋ค)
์ถ๋ ฅ
์ฒซ์งธ ์ค์๋ ๊ทธ๋ฆผ์ ๊ฐ์, ๋์งธ ์ค์๋ ๊ทธ ์ค ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด ํ๋๋ ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๋ 0์ด๋ค.
์์
6 5
1 1 0 1 1
0 1 1 0 0
0 0 0 0 0
1 0 1 1 1
0 0 1 1 1
0 0 1 1 1
output
4
9
ํ์ด
BFS๋ก ํ ์ ์๋ ๊ธฐ๋ณธ ์ ํ์ ๋ฌธ์ ๋ผ๊ณ ํ ์ ์๋ค. ํฐ ๋ํ์ง(map)์ ํ์ํ๋ฉด์ ๊ทธ๋ฆผ์ ๊ฐ์์ ๊ฐ์ฅ ํฐ ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ์์๋ด๋ฉด ๋๋ค. ์ด๋ ๊ทธ๋ฆผ์ 1๋ก ์ฐ๊ฒฐ๋ ๊ฒ๋ค์ ์๋ฏธํ๋ค.
๊ทธ๋ฆผ์ ๊ฐ์์ ์ต๋ ๋์ด๋ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์ฐพ์ ์ ์๋ค.
์์ธํ ํ์ด
- ๊ทธ๋ฆผ์ ์ฐพ์ ๋๊น์ง ๋ํ์ง๋ฅผ ํ์ํ๋ค. (
map[i][j] == 1์ธ๊ฑธ ์ฐพ์๋๊น์ง ์ด์คfor๋ฌธ์ผ๋ก ํ์ํ๋ค
) - ์ฒ์์ผ๋ก ๊ทธ๋ฆผ์ ์ผ๋ถ๋ฅผ ์ฐพ์๋ค๋ฉด ๊ทธ๋ฆผ์ ๋ชจ๋ ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฃผ๋ณ์ ํ์ํ๋ฉฐ ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ๊ตฌํ๋ค. (
bfs
) - ์ฐพ์ ๊ทธ๋ฆผ์ ๋ค์ ์ฐพ์ง ์๊ธฐ ์ํด์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ค๋ ์ฒดํฌ๋ฅผ ํด ๋๋๋ค(
visited ๋ฐฐ์ด ํ์ฉ
) - ๋ค์ ๋ค๋ฅธ ๊ทธ๋ฆผ์ ์ฐพ๊ธฐ ์ํด ๋ํ์ง๋ฅผ ํ์ํ๋ค
- ๊ทธ๋ฆผ์ ์ผ๋ถ๋ฅผ ์ฐพ์๋ค๋ฉด ์ด๋ฏธ ์ฐพ์๋ ๊ทธ๋ฆผ์ธ์ง ํ์ธํด๋ณธ๋ค(
visited[i][j] == 1์ด๋ฉด ์ด๋ฏธ ์ฐพ์๋ ๊ทธ๋ฆผ
) - ์๋๋ผ๋ฉด 2~3๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
- ๋ํ์ง๋ฅผ ๋ชจ๋ ํ์ํ๋ค๋ฉด ์ง๊ธ๊น์ง ์ฐพ์ ๊ทธ๋ฆผ์ ๊ฐ์์ ๊ทธ๋ฆผ์ ์ต๋ ๋์ด๋ฅผ ์ถ๋ ฅํ๋ค.
bfs๋ฅผ ์ด์ฉํด์ ๊ทธ๋ฆผ์ ์กฐ๊ฐ์์๋ถํฐ ์ ์ฒด ๊ทธ๋ฆผ์ ํ์ํ๊ณ , ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ๊ตฌํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค. ์ด๋ ์ด๋ฏธ ์ฐพ์๋(๋ฐฉ๋ฌธํ๋) ๊ทธ๋ฆผ์ด๋ผ๋ฉด ์ฌ๋ฐฉ๋ฌธํ๋๊ฒ ๋นํจ์จ์ ์ด๋ฏ๋ก ๋ฐฉ๋ฌธ ํ์ธ์ฉ 2์ฐจ์ ๋ฐฐ์ด(visited
)์ ํตํด ๋ฐฉ๋ฌธ์ฌ๋ถ๋ฅผ ์ ์ฅํ๋ค.
๊ทธ๋ฆผ์ ๊ฐ์
์๋ก์ด ๊ทธ๋ฆผ์ ์กฐ๊ฐ(map[i][j] == 1 && !visited[i][j]
)์ ์ฐพ์๋ด๋ฉด ํ๋ฒ์ bfs๋ก ์ ์ฒด ๊ทธ๋ฆผ์ ์ฐพ์๋ด๊ธฐ(๋ฐฉ๋ฌธํ๊ธฐ)๋๋ฌธ์ ๋ํ์ง๋ฅผ ํ์ํ ๋ ์ด์ ์ ๋ฐฉ๋ฌธํ์ง ์์๋ ๊ทธ๋ฆผ์ ์กฐ๊ฐ(map[i][j] == 1
)์ ์ฐพ์๋ธ(๋ฐฉ๋ฌธํ) ํ์๊ฐ ๊ทธ๋ฆผ์ ๊ฐ์์ด๋ค. ์ฆ, ์๋กญ๊ฒ bfs๋ฅผ ์คํํ๋ ํ์๊ฐ ๊ทธ๋ฆผ์ ๊ฐ์์ด๋ค.
๊ทธ๋ฆผ์ ๋์ด
์๋ก์ด ๊ทธ๋ฆผ์ ์กฐ๊ฐ(map[i][j] == 1 && !visited[i][j]
)์ ์ฐพ์๋ด๋ฉด ํ๋ฒ์ bfs๋ก ์ ์ฒด ๊ทธ๋ฆผ์ ์ฐพ์๋ด๊ธฐ(๋ฐฉ๋ฌธํ๊ธฐ)๋๋ฌธ์ bfs ์คํ ์ ๋ฐฉ๋ฌธํ ๊ทธ๋ฆผ ์กฐ๊ฐ(๋
ธ๋)์ ๊ฐ์๊ฐ ๊ทธ๋ฆผ์ ๋์ด์ด๋ค. ์ฆ, bfs ์คํ ์ queue์์ pop๋๋ ํ์๊ฐ ๊ทธ๋ฆผ์ ๋์ด์ด๋ค.
์ฝ๋
// ๋ฉค๋ฒ๋ณ์ ์ ์ธ
private static boolean[][] map = new boolean[500][500];
private static boolean[][] visited = new boolean[500][500];
// ์๋ต
Queue<Pair> q = new LinkedList<>();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
// ๊ทธ๋ฆผ์ด๊ณ && ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
if (map[i][j] && !visited[i][j]) {
cnt++; // ๊ทธ๋ฆผ ๊ฐ์ ์ถ๊ฐ
visited[i][j] = true; // ๋ฐฉ๋ฌธ
q.add(new Pair(i, j));
int area = 0; // ๊ทธ๋ฆผ ๋์ด ์ด๊ธฐํ(์๋ก์ด ๊ทธ๋ฆผ ์์)
while (!q.isEmpty()) {
Pair cur = q.poll();
for (int dir = 0; dir < 4; dir++) {
int nx = cur.x + dx[dir];
int ny = cur.y + dy[dir];
if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
if (!map[nx][ny] || visited[nx][ny]) continue;
visited[nx][ny] = true;
q.add(new Pair(nx, ny));
}
area++;
}
maxArea = Math.max(maxArea, area);
}
}
}
System.out.println(cnt + "\n" + maxArea);