728x90
반응형
SMALL
https://programmers.co.kr/learn/courses/30/lessons/1829
import java.util.*;
import java.math.*;
class Solution {
static class Node{
int x;
int y;
public Node(int x, int y) {
this.x= x;
this.y=y;
}
}
int dx [] = {-1,0,1,0};
int dy [] = {0,1,0,-1};
boolean visited [][]= {};
public int[] solution(int m, int n, int[][] picture) {
int numberOfArea = 0;
int maxSizeOfOneArea = 0;
visited = new boolean [m][n];
for(int i = 0 ; i<m; i++) {
for(int j = 0 ; j<n ; j++) {
if(visited[i][j] != true && picture[i][j] != 0) {
numberOfArea++;
maxSizeOfOneArea = Math.max(maxSizeOfOneArea,bfs(m,n,picture,i,j));
}
}
}
/* dfs 스택,재귀 bfs 큐arraylist
1 1 1 0
1 2 2 0
1 0 0 1
0 0 0 1
0 0 0 3
0 0 0 3
*/
int[] answer = new int[2];
answer[0] = numberOfArea;
answer[1] = maxSizeOfOneArea;
return answer;
}
public int bfs (int m, int n, int[][]picture, int x,int y){
Queue <Node > q = new LinkedList<Node>();
q.add(new Node(x,y));
visited[x][y] = true;
int nx = 0;
int ny = 0;
int size = 1;
while(! q.isEmpty()) {
Node now = q.poll();
for(int i = 0 ; i<4; i++) {
nx = now.x + dx[i];
ny = now.y + dy[i];
if(nx >=0 && nx < m && ny >= 0 && ny< n) {
if(picture[nx][ny] == picture[x][y] && visited[nx][ny] == false) {
visited[nx][ny] = true;
size++;
q.add(new Node(nx,ny));
}
}
}
}
return size;
}
}
반응형
LIST
'IT > CodingTeest' 카테고리의 다른 글
[프로그래머스] 오픈채팅방-java (0) | 2022.03.01 |
---|---|
[프로그래머스] 124나라의 숫자-java (0) | 2022.03.01 |
[프로그래머스] 기능개발 (0) | 2022.03.01 |
[프로그래머스]네트워크 java (0) | 2022.03.01 |
[error] Dangling meta character ..near index 0 (0) | 2022.03.01 |