프로그래머스 - 카카오프렌즈 컬러링북

well-life-gm·2021년 11월 14일
0

프로그래머스

목록 보기
51/125

프로그래머스 - 카카오프렌즈 컬러링북

bfs + queue를 사용할 줄 알면 굉장히 쉬운 문제이다.

문제 시작하면 전역변수를 사용할 때 무조건 값을 초기화하고 사용해달라고 했는데, 실수로 이 주석을 지우고 코드를 짜다가 visit 배열을 초기화 안하고 사용했다가 제출했다가 틀리고 삽질 조금 했다;
전역변수는 0으로 초기화되는게 C의 기본인데 왜 굳이 이런 제한을 걸어놓는지 도무지 이해가 안된다...

#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

int rowDir[4] = { -1, 1, 0, 0 };
int colDir[4] = { 0, 0, -1, 1 };
int row_size;
int col_size;
int visit[128][128];
typedef struct __pos {
    int row;
    int col;
}pos;

int bfs(const vector<vector<int>> &picture, int row, int col) 
{
    int area = 0;
    int base = picture[row][col];
    queue<pos> q;
    q.push( {row, col} );
    while(1) {
        if(q.empty())
            break;
        pos cur = q.front(); q.pop();
        if(visit[cur.row][cur.col])
            continue;
        visit[cur.row][cur.col] = 1;
        area++;
        for(int i=0;i<4;i++) {
            int nrow = cur.row + rowDir[i];
            int ncol = cur.col + colDir[i];
            if(nrow < 0 || ncol < 0 || nrow > row_size - 1 || ncol > col_size - 1)
                continue;
            if(visit[nrow][ncol])
                continue;
            if(picture[nrow][ncol] != base)
                continue;
            q.push({nrow, ncol});
        }
    }
    return area;
}
vector<int> solution(int m, int n, vector<vector<int>> picture) {
    int number_of_area = 0;
    int max_size_of_one_area = 0;
    row_size = m;
    col_size = n;
    for(int i=0;i<128;i++) 
        for(int j=0;j<128;j++)
            visit[i][j] = 0;
    
    for(int i=0;i<row_size;i++) {
        for(int j=0;j<col_size;j++) {
            if(picture[i][j] == 0)
                continue;
            if(visit[i][j] == 0) {
                max_size_of_one_area = max(max_size_of_one_area, bfs(picture, i, j));
                number_of_area++;
            }
        }
    }
    vector<int> answer(2);
    answer[0] = number_of_area;
    answer[1] = max_size_of_one_area;
    return answer;
}

결과

profile
내가 보려고 만든 블로그

0개의 댓글