#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; }
cmk330 6년 전
안녕하세요 카카오코드 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;
}
갓고수님들 제발 도와주세요..!
봐주셔서 감사합니다!