BOJ/C++ 적록색약 IamToday 2020. 3. 8. 17:49 *RGB에 따라 구역을 라벨링한다. (적록색약이 아닌 사람이 보는 영역들) *G-> R로 바꾼 후에 구역을 라벨링한다. (적록색약인 사람이 보는 영역들) *맵을 변경하지 않고 인접하는 영역 중 RG인 것들을 만나면 영역의 개수를 줄여주는 방식으로 풀려고 했는데 (주석처리된 부분) 왜 안되는 지 모르겠다.. #include <iostream> #include <vector> #include <cstring> using namespace std; int n; char map[101][101]; bool visited[101][101]; int dx[4] = { -1,1,0,0 }, dy[4] = { 0,0,-1,1 }; void dfs(int x, int y, char now, int label) { if (visited[x][y]) return; visited[x][y] = true; for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx < 0 || nx >= n || ny < 0 || ny >= n || visited[nx][ny]) continue; if (map[nx][ny] == now) dfs(nx, ny, now, label); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> map[i][j]; } } int label = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (!visited[i][j]) { ++label; dfs(i, j, map[i][j], label); } } } /*for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << labelMap[i][j] << ' '; } cout << '\n';*/ //} cout << label << ' '; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (map[i][j] == 'G') map[i][j] = 'R'; } } label = 0; memset(visited, 0, sizeof(visited)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (!visited[i][j]) { ++label; dfs(i, j, map[i][j], label); } } } cout << label << '\n'; /*for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (map[i][j] == 'R' || map[i][j] == 'G') { for (int k = 0; k < 4; k++) { int nx = i + dx[k]; int ny = j + dy[k]; if (nx < 0 || nx >= n || ny < 0 || ny >= n || map[nx][ny] == 'B') continue; if (labelMap[i][j] != labelMap[nx][ny]) { if (!combine[labelMap[nx][ny]][labelMap[i][j]] && !combine[labelMap[i][j]][labelMap[nx][ny]]) { combine[labelMap[i][j]][labelMap[nx][ny]] = true; combine[labelMap[nx][ny]][labelMap[i][j]] = true; label--; } } } } } }*/ return 0; } 공유하기 게시글 관리 나는 오늘, 'BOJ > C++' 카테고리의 다른 글 잃어버린 괄호 (0) 2020.03.09 배달 (0) 2020.03.09 사탕게임 (0) 2020.03.08 좋은 단어 (0) 2020.03.08 동전2 (0) 2020.03.08 'BOJ/C++' Related Articles 잃어버린 괄호 배달 사탕게임 좋은 단어