cmk330   3년 전

안녕하세요 카카오코드 1번문제도 못풀고 광탈한 코알못입니다.ㅠㅠ

플러드필로 문제를 풀었는데 제가 생각한 범위내에서는 다 처리한것 같은데 왜 코드가 틀렸다고 나오는지 도저히 모르겠습니다. 

봐주시면 감사드리겠습니다. ㅠㅠ

우선 링크입니다.

https://www.kakaocode.com/tryo...

or

https://www.kakaocode.com/tryo...


#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
bool check[101][101];
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};

// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
vector<int> solution(int m, int n, vector<vector<int>> picture) {
    int number_of_area = 0;    // 영역의 수
    int max_size_of_one_area = 0;   // 최대 영역의 크기

    for (int i=0; i<m; i++) { // 한칸 씩 방문
        for (int j=0; j<n; j++) {
            if (picture[i][j] != 0 && check[i][j] == false) { // 그림에 색이 있고, 방문하지 않았으면 방문.
                number_of_area++;  // 영역의 수 1증가.

                
                queue<pair<int,int>> q;
                q.push(make_pair(i, j));    // 한 픽셀 큐에 넣기.
                check[i][j] = true;         // 방문한 픽셀은 방문했다는 표시. 
                int elemCount = 1;          // 영역의 개수. 1부터 시작!


                while (!q.empty()) {
                    int x = q.front().first;    // x좌표
                    int y = q.front().second;   // y좌표
                    q.pop();                    // 큐에서 제거
                    int curPixel = picture[x][y];   // 현재 픽셀 값.
                    for (int k=0; k<4; k++) {   // 현재 픽셀 기준으로 상하좌우 체크
                        int nx = x+dx[k];
                        int ny = y+dy[k];
                        if ((0 <= nx) && (nx < m) && (0 <= ny) && (ny < n)) {   // 경계체크하고
                            if ((picture[nx][ny] == curPixel) && (check[nx][ny] == false)) {//픽셀 값이 현재 보고있는 영역과 같고, 방문한적없으면 true
                                q.push(make_pair(nx, ny));
                                check[nx][ny] = true;
                                elemCount++;
                            }
                        }
                    }
                }
                if (max_size_of_one_area < elemCount) { // maximum 영역의 크기 체크
                    max_size_of_one_area = elemCount;
                }
                
                ////
            }
        }
    }
    
    vector<int> answer(2);
    answer[0] = number_of_area;
    answer[1] = max_size_of_one_area;
    return answer;
}


갓고수님들 제발 도와주세요..! 

봐주셔서 감사합니다!

cmk330   3년 전

해결했습니다.

이거 전역변수 쓸때 함수 안에서 초기화 해줘야 한다네요...

댓글을 작성하려면 로그인해야 합니다.