관리 메뉴

기억을 위한 기록들

[프로그래머스 lv 2 ] - 카카오프렌즈 컬러링북 본문

Coding Test - cpp/BFS

[프로그래머스 lv 2 ] - 카카오프렌즈 컬러링북

에드윈H 2021. 10. 5. 20:01

https://programmers.co.kr/learn/courses/30/lessons/1829

 

코딩테스트 연습 - 카카오프렌즈 컬러링북

6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5]

programmers.co.kr

#include <vector>
#include <queue>
#include <iostream>

using namespace std;
int dir[4][2]={
    {0,1}
    ,{1,0}
    ,{-1,0}
    ,{0,-1}
};

bool visit[100][100];

int bfs(int m,int n,int targetX,int targetY,const vector<vector<int>>& picture)
{
    int target=picture[targetX][targetY];  
    int cnt=1;
    queue<pair<int,int>> q;    
    q.push({targetX,targetY});
    visit[targetX][targetY] = true;

    while(!q.empty())
    {
        int curX=q.front().first;
        int curY=q.front().second;
        q.pop();

        for(int i=0;i<4;i++)
        {
            int nextX=curX+dir[i][0];
            int nextY=curY+dir[i][1];
            
            if (nextX < 0 || nextY < 0 || m <= nextX || n <= nextY)
				continue;
            
            if(picture[nextX][nextY]==target && visit[nextX][nextY]==false)
            {
                visit[nextX][nextY]=true;               
                q.push({nextX,nextY});
                cnt++;
            }
        }
        
    }
    
    return cnt;
}
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
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<100;i++)
    {
        for(int j=0;j<100;j++)
            visit[i][j]=false;
    }
    vector<int> answer(2);

    int cnt=0;
    int maxCnt=0;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(visit[i][j]==false && picture[i][j]!=0)
            {
                int result=bfs(m,n,i,j,picture);                
                maxCnt=max(result,maxCnt);
                cnt++;                
            }
        }
    }
    answer[0] = cnt;
    answer[1] = maxCnt;
    return answer;
           
}