Tags
- ๋ฐฑํธ๋ํน
- SpringBoot
- ์ ๋ ฌ
- PGM
- ๊ทธ๋ํ ์ด๋ก
- ๋ฌธ์์ด
- BFS
- BOJ
- ์ ์๋ก
- ๊ตฌํ
- DP
- Dynamic Programming
- dfs
- Brute Force Algorithm
- ๊น์ด ์ฐ์ ํ์
- Python
- CodingTest
- greedy
- ๊ทธ๋ํ ํ์
- stack
- sort
- ์๋ฃ๊ตฌ์กฐ
- ๊ต์ฌ
- Study
- ์ํ
- LV2
- ์๋ฎฌ๋ ์ด์
- queue
- ๋๋น ์ฐ์ ํ์
- Java
Archives
๊ธฐ๋ก๋ฐฉ
Lv.2 : [PCCP ๊ธฐ์ถ๋ฌธ์ ] 2๋ฒ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- n x m ํฌ๊ธฐ์ ๋ ์ ์์ ๋ฉ์ด๋ฆฌ๋ค์ด ์๋ค. ์ด๋ ์ง์ ์์ ์์ถํด์ผ ๊ฐ์ฅ ๋ง์ ์์ ๋ฅผ ์์ถํ๋์ง ๊ตฌํ๋ค.
- ์์ถ๋ ๊ฐ์ฅ ์์์ ์์ง์ผ๋ก ํ๋๋ฐ, ์์ถ๊ธฐ๊ฐ ์ง๋๊ฐ๋ ์์ ๋ฉ์ด๋ฆฌ๋ฅผ ๋ชจ๋ ์์ถํ ์ ์๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ์์ ๋ฉ์ด๋ฆฌ๋ฅผ ์ฒ์ ๋ฐ๊ฒฌํ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌํ๋ค.
- ์์ ๋ฉ์ด๋ฆฌ ๋ฒํธ๋ฅผ ๋ถ์ธ๋ค.
- ํด๋น ๋ฉ์ด๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ํ์ํด ํ์ ํ๊ณ , ๋ฒํธ์ ๋ง๊ฒ ํฌ๊ธฐ๋ฅผ ์ ์ฅํด๋๋ค.
- ๋ง์ง๋ง์ ๋ชจ๋ ์ง์ ์์ ์์ถํด๋ณด๋ฉฐ, ์์ถ ๋๋ ์์ ๋์ ์ต๋๊ฐ์ ๋ฐํํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.util.Queue;
import java.util.ArrayDeque;
class Solution {
private static class Point {
int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
public int solution(int[][] land) {
int n = land.length;
int m = land[0].length;
int[][] map = new int[n][m]; // ์์ ๋ฉ์ด๋ฆฌ ๋ณ ์ซ์ ๋ถ์ฌ
int[] oils = new int[n * m + 1]; // ์์ ๋ฒํธ ๋ณ ์์ ๋
int oileCnt = 0; // ์ฒดํฌํ ๋ฉ์ด๋ฆฌ ์
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (land[i][j] == 1 && map[i][j] == 0) { // ์ฒ์ ์์ ๋ฉ์ด๋ฆฌ ๋ฐ๊ฒฌ
oileCnt++;
int cnt = 1;
// BFS
Queue<Point> que = new ArrayDeque<>();
que.add(new Point(i, j));
map[i][j] = oileCnt;
while (!que.isEmpty()) {
Point point = que.poll();
for (int k = 0; k < dx.length; k++) {
int row = point.x + dx[k];
int col = point.y + dy[k];
if (0 <= row && row < n && 0 <= col && col < m && land[row][col] == 1
&& map[row][col] == 0) {
map[row][col] = oileCnt;
cnt++;
que.add(new Point(row, col));
}
}
}
// ํ์ฌ ๊ธฐ๋ฆ ๋ฉ์ด๋ฆฌ ๋ฒํธ์ ํฌ๊ธฐ ์ ์ฅ
oils[oileCnt] = cnt;
}
}
}
int answer = 0;
for (int i = 0; i < m; i++) { // ์ต๋๊ฐ ๋๋ ์์ถ ์ง์ ์ฐพ๊ธฐ
boolean[] check = new boolean[oileCnt + 1];
int sum = 0;
for (int j = 0; j < n; j++) {
if (!check[map[j][i]]) {
check[map[j][i]] = true;
sum += oils[map[j][i]];
}
}
answer = Math.max(answer, sum);
}
return answer;
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์์ ๋ฉ์ด๋ฆฌ ๋ฒํธ๋ฅผ ํด๋น ๋ฉ์ด๋ฆฌ์ ๋ชจ๋ ์ง์ ์ ๊ธฐ๋กํด๋๋ค.
- ์ฒ์ ์์ ๋ฉ์ด๋ฆฌ๋ฅผ ๋ฐ๊ฒฌํ์ ๋, BFS๋ฅผ ํตํด ํฌ๊ธฐ๋ฅผ ํ์ ํ๋ค.
- ์์ถ๋์ด ์ต๋๊ฐ ๋๋ ์์ ๋์ ๊ตฌํ๋ค.
- boolean ๋ฐฐ์ด check๋ฅผ ๋ฉ์ด๋ฆฌ ๊ฐ์ ๋งํผ ๋ง๋ค์ด, ํ ๋ฒ์ ์์ถ์์ ์ด๋ฏธ ํ์ ํ ๋ฉ์ด๋ฆฌ๋ผ๋ฉด, ํฉ์ฐํ์ง ์๋ ๋ฐฉ์์ผ๋ก ๊ณ์ฐํ๋ค.
๐ธ end ๐ธ
- PCCP์์ ํ์๋ ๋ฌธ์ ์ธ๋ฐ, ์ด๋ฒ์ ๊ธฐ์ถ๋ก ๊ณต๊ฐ๋์ด์ ๋ค์ ํ ๋ฒ ํ๊ฒ ๋์๋ค.
- ์ํ์์ ํ ๋๋ ๋ง์์๋๋ฐ, ๊ทธ๋ฅ ๊ธฐ์ด์ ์ธ BFS๋ฌธ์ ์ฌ์ ๊ฐ๋จํ ํ์ดํ ์ ์์๋ค.
- ๋ค๋ฅธ ํ์ด๋ค๋ ๋น์ทํ๊ฒ ํ์ดํ ๊ฒ ๊ฐ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Lv.2 : ์๊ฒฉ ์์คํ (0) | 2023.11.29 |
---|---|
Lv.2 : ์ซ์ ๋ณํํ๊ธฐ (0) | 2023.11.27 |
Lv.2 : ๋กค์ผ์ดํฌ ์๋ฅด๊ธฐ (0) | 2023.11.23 |
Lv.2 : ์คํ์ฑํ ๋ฐฉ (0) | 2023.11.23 |
Lv.2 : ๋ค์ ์๋ ํฐ ์ ์ฐพ๊ธฐ (0) | 2023.11.23 |