-
[Algorithm] 백준 10026 적록색약 - C++, BFS쾌락없는 책임 (공부)/알고리즘 문제풀이 2022. 2. 27. 21:13반응형
#include <iostream> #include <queue> #include <cstring> using namespace std; int n, regionCount1 = 0, regionCount2 = 0; const char R = 'R', G = 'G'; char map[101][101]; bool visit[101][101]; int moveX[] = { 0, 0, 1, -1 }; int moveY[] = { 1, -1, 0, 0 }; bool isOut(int x, int y){ if(x < 0 || y < 0 || x >= n || y>= n) return true; return false; } void searchByBfs(int x, int y, const bool isRGSame){ char curRegion = map[x][y]; bool isInputRG = (curRegion == R || curRegion == G) ? true : false; queue<pair<int, int>> q; // x, y q.push(make_pair(x, y)); while(!q.empty()){ int curX = q.front().first; int curY = q.front().second; q.pop(); for(unsigned i = 0; i < 4; i++){ int nextX = curX + moveX[i]; int nextY = curY + moveY[i]; if(isOut(nextX, nextY)) continue; if(visit[nextX][nextY]) continue; if(isRGSame && isInputRG){ if(map[nextX][nextY] == R || map[nextX][nextY] == G){ visit[nextX][nextY] = true; q.push(make_pair(nextX, nextY)); } } else { if(map[nextX][nextY] == curRegion){ visit[nextX][nextY] = true; q.push(make_pair(nextX, nextY)); } } } } } int main(){ // init ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // input cin >> n; for(unsigned x = 0; x < n; x++) for(unsigned y = 0; y < n; y++) cin >> map[x][y]; // solve for(unsigned x = 0; x < n; x++){ for(unsigned y = 0; y < n; y++){ if(!visit[x][y]){ regionCount1++; searchByBfs(x, y, false); } } } memset(visit, false, sizeof(visit)); for(unsigned x = 0; x < n; x++){ for(unsigned y = 0; y < n; y++){ if(!visit[x][y]){ regionCount2++; searchByBfs(x, y, true); } } } // output cout << regionCount1 << " " << regionCount2 << '\n'; }
코드를 더 줄이지 못한게 아쉬웠지만 메모리나 시간에서는 크게 다른점이 없었습니다.
일단 이 문제에서 핵심 키워드는 'bfs로 탐색되는 횟수 = 지역의 수' 라는 것이고 보통의 눈 1번, 적록색약의 눈 1번 bfs를 해주면 됩니다.
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
[Algorithm] 프로그래머스 단속카메라 - C++, 그리디 (0) 2022.03.01 [Algorithm] 백준 2887 행성 터널 - C++, 크루스칼 알고리즘 (0) 2022.02.28 [Algorithm] 프로그래머스 프린터 - C++, 큐, 우선순위 큐 (0) 2022.02.26 [Algorithm] 프로그래머스 더 맵게 - C++, 우선순위 큐 (0) 2022.02.26 [Algorithm] 백준 1520 내리막 길 - C++ ,DFS (0) 2022.02.26