출처: http://t1.kakaocdn.net/codefestival/preliminary.pdf
이번에 풀어볼 문제는 다음과 같습니다.
이번 문제를 풀 때 DFS search를 써서 인접한 영역들을 찾아내고 그 크기를 계산하는 것을 시도했습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
class Solution {
public static int m,n;
public static int[][] picture;
public static boolean visited[][];
public static int size=0;
public int[] solution(int m, int n, int[][] picture) {
int numberOfArea = 0;
int maxSizeOfOneArea = 0;
//TODO 1: 다른 함수에서 데이터에 접근하기 위해 전역변수취급을 해줍니다.
this.m=m;
this.n=n;
this.picture=picture;
this.visited=new boolean[m][n];
/*
TODO 2
반복문을 통해서 새로 탐색할 부분을 찾고,
serch함수(영역의 크기계산 & 탐색한 부분은 visited배열에서 true로 처리합니다.
그리고 최대 영역크기를 갱신합니다.
*/
for(int r=0;r<m;r++){
for(int l=0;l<n;l++){
if(visited[r][l]==false && picture[r][l]!=0 ){
searchSize(r,l);
numberOfArea++;
if(size>maxSizeOfOneArea) maxSizeOfOneArea=size;
size=0;
}
}
}
int[] answer = new int[2];
answer[0] = numberOfArea;
answer[1] = maxSizeOfOneArea;
return answer;
}
public static int searchSize(int r,int l){
// TODO 3: searchSize함수는 DFS search로 상하좌우 영역을 탐색합니다.
size++;
visited[r][l]=true;
if(r>0 && visited[r-1][l]==false &&picture[r-1][l]==picture[r][l]){
searchSize(r-1,l);
}
if(r<m-1 && visited[r+1][l]==false &&picture[r+1][l]==picture[r][l]){
searchSize(r+1,l);
}
if(l>0 && visited[r][l-1]==false && picture[r][l-1]==picture[r][l]){
searchSize(r,l-1);
}
if(l<n-1 && visited[r][l+1]==false &&picture[r][l+1]==picture[r][l]){
searchSize(r,l+1);
}
return 0;
}
}
| cs |
'Computer Science > Data Structure' 카테고리의 다른 글
Dive Data Structure with Java Collection (1) | 2022.03.10 |
---|---|
자료구조1 - Selection Sort(선택정렬) & Bineary search(이진탐색) (0) | 2020.01.18 |
자료구조 3 - Transposing Sparse Matrix ( 희소행렬 대칭이동) (0) | 2020.01.18 |