https://school.programmers.co.kr/learn/courses/30/lessons/1829
๋ฌธ์
๋ฌธ์ ์ค๋ช
์ถํ์ฌ์ ํธ์ง์์ธ ์ดํผ์น๋ ๋ค์ค์๊ฒ ์ปฌ๋ฌ๋ง๋ถ์ ๋ค์ด๊ฐ ์ํ๋ฅผ ๊ทธ๋ ค๋ฌ๋ผ๊ณ ๋ถํํ์ฌ ์ฌ๋ฌ ์ฅ์ ๊ทธ๋ฆผ์ ๋ฐ์๋ค. ์ฌ๋ฌ ์ฅ์ ๊ทธ๋ฆผ์ ๋์ด๋ ์์ผ๋ก ์ปฌ๋ฌ๋ง๋ถ์ ๋ฃ๊ณ ์ถ์๋ ์ดํผ์น๋ ์์ญ์ด ๋ง์ผ๋ฉด ์์น ํ๊ธฐ๊ฐ ๊น๋ค๋ก์ ์ด๋ ค์์ง๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ๊ณ ๊ทธ๋ฆผ์ ๋์ด๋๋ฅผ ์์ญ์ ์๋ก ์ ์ํ์๋ค. (์์ญ์ด๋ ์ํ์ข์ฐ๋ก ์ฐ๊ฒฐ๋ ๊ฐ์ ์์์ ๊ณต๊ฐ์ ์๋ฏธํ๋ค.)
๊ทธ๋ฆผ์ ๋ช ๊ฐ์ ์์ญ์ด ์๋์ง์ ๊ฐ์ฅ ํฐ ์์ญ์ ๋์ด๋ ์ผ๋ง์ธ์ง ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด์.
์์ ๊ทธ๋ฆผ์ ์ด 12๊ฐ ์์ญ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ์ฅ ๋์ ์์ญ์ ์ดํผ์น์ ์ผ๊ตด๋ฉด์ผ๋ก ๋์ด๋ 120์ด๋ค.
์ ๋ ฅ ํ์
์ ๋ ฅ์ ๊ทธ๋ฆผ์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ m๊ณผ n, ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฆผ์ ๋ํ๋ด๋ m × n ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด picture๋ก ์ฃผ์ด์ง๋ค. ์ ํ์กฐ๊ฑด์ ์๋์ ๊ฐ๋ค.
- 1 <= m, n <= 100
- picture์ ์์๋ 0 ์ด์ 2^31 - 1 ์ดํ์ ์์์ ๊ฐ์ด๋ค.
- picture์ ์์ ์ค ๊ฐ์ด 0์ธ ๊ฒฝ์ฐ๋ ์์น ํ์ง ์๋ ์์ญ์ ๋ปํ๋ค.
์ถ๋ ฅ ํ์
๋ฆฌํด ํ์ ์ ์์๊ฐ ๋ ๊ฐ์ธ ์ ์ ๋ฐฐ์ด์ด๋ค. ๊ทธ๋ฆผ์ ๋ช ๊ฐ์ ์์ญ์ด ์๋์ง์ ๊ฐ์ฅ ํฐ ์์ญ์ ๋ช ์นธ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋์ง๋ฅผ ๋ฆฌํดํ๋ค.
์์ ์ ์ถ๋ ฅ
m | n | picture | answer |
---|---|---|---|
0 | 4 | [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] | [4, 5] |
ํ์ด
BFS
๋ฅผ ์ด์ฉํด ํ์ด!! ์๊ฐ๋จ
~
๐โ๏ธ
- picture[i][j] ๊ฐ 0์ด ์๋๋ฉด BFS๋ฅผ ์์
- ๊ฐ์ ๊ฐ์ ๊ฐ์ง ์์ญ์ ๋์ด๋ฅผ return ๋ฐ์
- maxSizeOfArea ์ ๋น๊ต
- cntOfArea += 1
- return new int[]{cntOfArea, maxSizeOfArea};
์ฝ๋
boolean[][] isVisited;
int maxSizeOfArea, cntOfAreas;
int[] dx = {-1, 0, 0, 1};
int[] dy = {0, -1, 1, 0};
public int[] solution(int m, int n, int[][] picture) {
isVisited = new boolean[m][n];
maxSizeOfArea = 0;
cntOfAreas = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if(picture[i][j] == 0) continue;
if (!isVisited[i][j]) {
isVisited[i][j] = true;
int cnt = BFS(i, j, picture, m, n);
cntOfAreas += 1;
maxSizeOfArea = Math.max(maxSizeOfArea, cnt);
}
}
}
return new int[]{cntOfAreas, maxSizeOfArea};
}
private int BFS(int x, int y, int[][] picture, int m, int n) {
Queue<int[]> q = new LinkedList<>();
q.add(new int[]{x, y});
int cnt = 1;
while (!q.isEmpty()) {
int[] cur = q.poll();
for (int d = 0; d < 4; d++) {
int nx = cur[0] + dx[d];
int ny = cur[1] + dy[d];
if(nx < 0 || ny < 0 || m <= nx || n <= ny || isVisited[nx][ny]) continue;
if(picture[nx][ny] == 0) continue;
if(picture[cur[0]][cur[1]] != picture[nx][ny]) continue;
isVisited[nx][ny] = true;
q.add(new int[]{nx, ny});
cnt += 1;
}
}
return cnt;
}
'์๊ณ ๋ฆฌ์ฆ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Programmers ] 124 ๋๋ผ์ ์ซ์ ( ์๋ฐ / JAVA ) (0) | 2022.09.01 |
---|---|
[ Programmers ] ๋จ์ฒด์ฌ์ง ์ฐ๊ธฐ ( ์๋ฐ / JAVA ) (1) | 2022.09.01 |
[ Programmers ] ์คํ์ฑํ ๋ฐฉ ( ์๋ฐ / JAVA ) (0) | 2022.08.31 |
[ Progammers ] ๋ฌธ์์ด ์์ถ ( ์๋ฐ / JAVA ) (0) | 2022.08.31 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers ] ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ ( ์๋ฐ / JAVA ) (0) | 2022.02.25 |