[ํ๋ก๊ทธ๋๋จธ์ค] ์นด์นด์คํ๋ ์ฆ ์ปฌ๋ฌ๋ง๋ถ
https://programmers.co.kr/learn/courses/30/lessons/1829
๋ฌธ์ ์ ๊ทผ
BFS๋ฅผ ์ด์ฉํด์ ๊ฐ์ ์์์ ๊ฐ์ง ์ธ์ ํ ๋
ธ๋๋ค์ ํ์ํ๊ณ ์์ญ๊ณผ ์์ญ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ขํ๊ฐ๊ณผ ํด๋น ์ขํ์ ์์ ์ ๋ณด๋ฅผ ๊ฐ์ง XYํด๋์ค๋ฅผ ๋ง๋ค์ด์ Queue๋ฅผ ์ด์ฉํ ๋ ํธํ๋๋ก ํ์๋ค.
Code
import java.util.LinkedList;
import java.util.Queue;
class Solution {
class XY {
int x;
int y;
int value; // ํด๋น ์ขํ์ ๊ทธ๋ฆผ
XY(){};
XY(int x, int y, int value){
this.x = x;
this.y = y;
this.value = value;
}
}
boolean isIn(int x, int y, int m, int n){
// ์์ญ์ ๋ฒ์ด๋๋์ง ๊ฒ์ฌํ๋ ํจ์
return (x <0 || x>=m || y < 0 || y >=n);
}
public int[] solution(int m, int n, int[][] picture) {
int numberOfArea = 0;
int maxSizeOfOneArea = 0;
int[][] visited = new int[m][n]; //๋ฐฉ๋ฌธํ ์์น์ธ์ง ๊ธฐ๋ก(1์ด๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์์น)
int[] dx = {-1,1,0,0};
int[] dy = {0,0,-1,1};
Queue<XY> q = new LinkedList<>();
for(int i = 0; i<m; i++){
for(int j = 0; j<n; j++){
int size=0;
if(picture[i][j] != 0 && visited[i][j]==0){
q.add(new XY(i,j,picture[i][j]));
visited[i][j] = 1;
numberOfArea++;
}
while(!q.isEmpty()){
// BFS๋ฅผ ์ฌ์ฉํ์ฌ ์์ญ ์ฐพ๊ธฐ
XY cur = q.poll();
size++;
for(int k =0; k<4; k++){
// dx, dy๋ฅผ ์ด์ฉํ์ฌ ํ์ฌ ์์น์ ์ํ์ข์ฐ๋ฅผ ํ์
int next_x = cur.x + dx[k];
int next_y = cur.y + dy[k];
if(isIn(next_x, next_y, m, n)){
continue;
}
int next_v = picture[next_x][next_y];
if(next_v == cur.value
&& visited[next_x][next_y]==0){
q.add(new XY(next_x,next_y, next_v));
visited[next_x][next_y] = 1;
}
}
}
if(size > maxSizeOfOneArea) maxSizeOfOneArea = size;
}
}
int[] answer = new int[2];
answer[0] = numberOfArea;
answer[1] = maxSizeOfOneArea;
return answer;
}
}
์ด๋ ค์ ๋ ์ / ๋ฐฐ์ด ์ / ๋๋ ์
๋ฌธ์ ๋ฅผ ๋ณด๊ณ BFS๋ฅผ ๋ ์ฌ๋ฆฌ๊ธด ํ์ง๋ง, ์ด๋์ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ์ง ์ด๋ป๊ฒ ํ์ํ ์ง๋ ์กฐ๊ธ ๊ณ ๋ฏผ์ ํ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ์ธ๋ฑ์ค๋ฅผ ๋ฒ์ด๋ ์๋ฌ๊ฐ ๋ ์ isIn ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์๊ณ , ๋ค๋ฅธ ๋ถ๋ถ๋ค๋ ๋ฉ์๋๋ก ๋นผ๋ ค๊ณ ํ์ผ๋, BFS ๋ถ๋ถ์ ๋ฉ์๋๋ก ๋ง๋ค๋ ค๋ฉด ๋๋ฌด ๋ง์ ๋ณ์๋ค์ ๋งค๊ฐ๋ณ์๋ก ํด์ค์ผํด์ ์ํ๋๊ฒ ๋ ๊น๋ํ ๊ฒ ๊ฐ๋ค.(ํ์์ฑ์ ๋ชป ๋๋ผ๊ฒ ๋ค.)
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ๋ ๋งต๊ฒ (0) | 2022.02.26 |
---|---|
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ๊ธฐ๋ฅ๊ฐ๋ฐ (0) | 2022.02.18 |
[Algorithm/Java][๋ฐฑ์ค] 1676๋ฒ ํฉํ ๋ฆฌ์ผ 0์ ๊ฐ์ (0) | 2022.02.14 |
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ (0) | 2022.02.14 |
[Algorithm/Java][LeetCode] 121. Best Time to Buy and Sell Stock (0) | 2022.02.05 |