728x90
300x250
https://programmers.co.kr/learn/courses/30/lessons/1829?language=java#
0이아닌 이어진 영역들의 갯수와 영역들 중에서 가장 큰 영역을 return하는 문제.
테케를 다 맞게 잘 짰지만 자꾸 실패가 떠서 찾아보던도중
프로그래머스에서는 전역변수를 지역변수에서 초기화 하지않으면 자꾸 실패가 뜬다고한다.,
그래서 굳이 한번씩 더 값을 넣어주거나 초기화 해주는 작업들을 수행했다.
0이 아니면서 처음방문하는 부분을 영역의 첫 start로 봤다. 그리고 이어진 부분들을 전부 count.
테케가 적어서 몇개 더 추가했다.
13, 16, [[0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0], [0, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 0], [0, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]]
답:[12,120]
import java.util.*;
class Solution {
public static int numberOfArea = 0;
public static int N=0,M=0,maxSizeOfOneArea = 0;
public static int cnt = 0;
public static boolean[][] visit;
public static int[][] map;
public static int[] dx = {0,1,0,-1};
public static int[] dy = {1,0,-1,0};
public int[] solution(int m, int n, int[][] picture) {
numberOfArea = 0;
maxSizeOfOneArea =0;
visit = new boolean[m][n];
map = picture;
N = n;
M = m;
for(int i = 0; i< picture.length; i++) {
for(int j = 0; j<picture[0].length; j++) {
cnt=0;
if(picture[i][j]!=0 && !visit[i][j]) {
visit[i][j]=true;
dfs(i,j,picture[i][j]);
numberOfArea++;
}
}
}
int[] answer = new int[2];
answer[0] = numberOfArea;//area.size();
answer[1] = maxSizeOfOneArea;
return answer;
}
public static void dfs(int row,int col, int num) {
cnt++;
for(int i =0;i<4;i++) {
int nx = row + dx[i];
int ny = col + dy[i];
//범위를 벗어나는가?
if(nx >= M || nx < 0 || ny >= N || ny < 0)
continue;
//내가 찾는 영역이 아닌가?
if(map[nx][ny]!=num)
continue;
//이미 들렸던 곳인가?
if(visit[nx][ny])
continue;
visit[nx][ny]=true;
dfs(nx,ny,num);
}
maxSizeOfOneArea = Math.max(maxSizeOfOneArea,cnt);
}
}
728x90
'알고리즘 > DFS & BFS' 카테고리의 다른 글
SWEA - 1226. [S/W 문제해결 기본] 7일차 - 미로1 (0) | 2020.08.09 |
---|---|
SWEA - 1210. [S/W 문제해결 기본] 2일차 - Ladder1 (0) | 2020.08.09 |
SWEA - 2814. 최장 경로 (1) | 2020.04.04 |
백준 14501번: 퇴사 (0) | 2020.03.21 |
백준 3190번: 뱀 (0) | 2020.03.08 |