[백준] C++ 10026번:적록색약

2025. 12. 14. 15:31·알고리즘

기존 BFS에서 1로 탐색 지점을 표시했다면 이번에는 RGB중 1개 이므로

영역이 같은지는 아래와 같이 판단한다

if (v[cur.first][cur.second] == v[yy][xx]) //if(현재영역 값 == 너비탐색하는영역 값)

 

이 문제에서는 적록색약 사람의 관점도 요구하기 때문에 

for로 G를 R로 바꾸어 BFS를 재활용한다.

 

#include <bits/stdc++.h>
using namespace std;

int dx[4] = {1, 0 , -1, 0};
int dy[4] = {0, -1, 0, 1};

int n;

void bfs(vector<vector<char>> v) {
    vector<vector<int>> vis (n, vector<int>(n, 0));
    queue<pair<int,int>> q;
    int cnt = 0;
    for (int y = 0; y < n; y++) {
        for (int x = 0; x < n; x++) {
            if(v[y][x] == 'R' || v[y][x] == 'G' || v[y][x] == 'B') {
                if(vis[y][x] == 0) {
                    cnt++;
                    q.push({y, x});
                    vis[y][x] = 1;
                    while(!q.empty()) {
                        auto cur = q.front();
                        q.pop();
                        for(int i = 0; i < 4; i++){
                            int yy = cur.first + dy[i];
                            int xx = cur.second + dx[i];
                            if (yy > -1 && yy < n && xx > -1 && xx < n && v[cur.first][cur.second] == v[yy][xx] && vis[yy][xx] == 0 ) {
                                q.push({yy, xx});
                                vis[yy][xx] = 1;
                            }
                        }
                    }
                }
                
            }
        }
    }
    cout << cnt << " ";
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    
    cin >> n;
    vector<vector<char>> v(n, vector<char>(n));
    

    for (int y = 0; y < n; y++) {
        for (int x = 0; x < n; x++) {
            char ch;
            cin >> ch;
            v[y][x] = ch;
        }
    }

    bfs(v);

    for (int y = 0; y < n; y++) {
        for (int x = 0; x < n; x++) {
            if (v[y][x] == 'G')
                v[y][x] = 'R';
        }
    }
    bfs(v);


    return 0;
}

'알고리즘' 카테고리의 다른 글

[백준] C++ 2583번:영역 구하기!  (0) 2025.12.15
[백준] C++ 5427번: 불!  (0) 2025.12.15
[백준] C++ 7562번:나이트의 이동!  (0) 2025.12.15
[백준] C++ 7569번:토마토!  (0) 2025.12.14
[백준] C++ 1012번:유기농배추  (0) 2025.12.14
'알고리즘' 카테고리의 다른 글
  • [백준] C++ 5427번: 불!
  • [백준] C++ 7562번:나이트의 이동!
  • [백준] C++ 7569번:토마토!
  • [백준] C++ 1012번:유기농배추
Deepmind_딥마인드
Deepmind_딥마인드
깊게 사고하자
  • Deepmind_딥마인드
    딥마인드
    Deepmind_딥마인드
  • 전체
    오늘
    어제
    • 분류 전체보기 (19)
      • 알고리즘 (11)
      • 메모 (0)
      • C언어 (0)
      • C언어 동아리 (0)
      • Ubuntu (0)
      • Ollama (1)
      • AI (4)
      • 정보공유 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ubuntu server 24.04.4 LTS
    에어팟 프로
    배터리 광탈
    노이즈캔슬링
    먼지
    백준
    스크래치
    DBeaver
    에어팟
    렉
    ollama
    소셜딜레마 #넷플릭스 #다큐멘터리 #넷플릭스 영화추천
    Claude
    Air Pods Pro
    agent
    Ai
    만다라트 #오타니 #목표설정 #무료템플릿
    단차
    OpenAI
    냄새
    호환
    c언어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Deepmind_딥마인드
[백준] C++ 10026번:적록색약
상단으로

티스토리툴바