알고리즘/bfs

[programmers] 카카오 프렌즈 컬러링북 (c++)

그린푸딩 2022. 2. 22. 22:13
728x90
반응형

 

 

 

문제를 보고 백준 2468번 구역을 구하는 dfs 문제가 생각났다. 각 구역의 넓이(갯수)를 좀더 창의적으로 구해보고 싶은데 나중에 시도해봐야겠다..

 

<소스코드>

 

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <vector>
#include<iostream>
using namespace std;
 
vector<vector<int>>visited;
int dr[4]={0,0,-1,1};
int dc[4]={-1,1,0,0};
int m1,n1;
int number_of_area = 0;
int max_size_of_one_area = 0;
int num=0;
int dfs(int r,int c,vector<vector<int>> picture,int num){
    
    int cur=picture[r][c];
    
    for(int i=0;i<4;i++){
        int nr=r+dr[i];
        int nc=c+dc[i];
        //왜 or로 하면 틀리지->return이 아니라 continue로 처리 
        if(nr>=0 && nr<m1 && nc>=0 && nc<n1 && !visited[nr][nc] && picture[nr][nc]==cur){
          visited[nr][nc]=1;
          
          num=dfs(nr,nc,picture,num+1);      
            
        } 
      
   }
   return num; 
    
}
//영역
vector<int> solution(int m, int n, vector<vector<int>> picture) {
    dr[0]=0;dr[1]=0; dr[2]=-1; dr[3]=1;
    dc[0]=-1;dc[1]=1;dc[2]=0; dc[3]=0;
 
    number_of_area = 0;
    max_size_of_one_area = 0;
    num=0;
    m1=m;
    n1=n;
    vector<int>v;
    visited.assign(m,vector<int>(n,0));
    
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(picture[i][j]>=1 && !visited[i][j]){
                num=1;
                visited[i][j]=1;
                
                v.push_back(dfs(i,j,picture,num));
                
                number_of_area++;
                
            }
            
        }
    }
    for(int i=0;i<v.size();i++){
       if(max_size_of_one_area<=v[i])
           max_size_of_one_area=v[i];
    }
    
    
    
    vector<int> answer(2);
    answer[0= number_of_area;
    answer[1= max_size_of_one_area;
    return answer;
    
}
cs

.

분명 테스트케이스는 통과했는데 계속 틀렸습니다가 나와서 코드만 계속 수정했는데 문제풀기 전 

"전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요"를 무시했었다.. 전역변수를 다시 초기화하니까 통과되긴 하는데 뭐때문에 전역변수가 문제가 되는지는 잘 모르겠다

 

코드첨부하는걸 처음해보는데 신기하다ㅎㅎ 다른것도 써봐야지  

 

728x90
반응형