[백준 10026번/골드5] 적록색약 (dfs/파이썬)

밀루·2023년 3월 28일

백준 문제풀이

목록 보기
8/51

import sys
sys.setrecursionlimit(10**6)

def dfs(x, y):
    dx = [-1, 1, 0, 0]
    dy = [0, 0, 1, -1]
    visited[x][y]= True
    for i in range(4):
        ax = x + dx[i]
        ay = y + dy[i]
        if 0 <= ax < n and 0 <= ay < n and not visited[ax][ay]:
            if graph[ax][ay] == graph[x][y]:
                dfs(ax, ay)
    

if __name__ == "__main__":
    n = int(input())
    graph = [list(input().rstrip()) for _ in range(n)]
    visited = [[False for _ in range(n)] for _ in range(n)]
    cnt = 0
    blind_cnt =0
    for i in range(n):
        for j in range(n):
            if not visited[i][j]:
                dfs(i, j)
                cnt += 1
    for i in range(n):
        for j in range(n):
            if graph[i][j]=='R':
                graph[i][j]='G'
    
    visited = [[False] * n for _ in range(n)]            
    for i in range(n):
        for j in range(n):
            if not visited[i][j]:
                dfs(i, j)
                blind_cnt += 1
    print(cnt, blind_cnt)

알고리즘은 간단하다.
dfs를 색약용 그래프와 본 그래프로 나눠서 실행하면 된다.

Tech:

  1. 입력이 이렇게 주어졌을때
    5
    RRRBB
    GGBBB
    BBBRR
    BBRRR
    RRRRR
graph = [list(input().rstrip()) for _ in range(n)]

로 받으면 된다.

profile
벨로그에 틀린 코드나 개선할 내용이 있을 수 있습니다. 지적은 언제나 환영합니다.

0개의 댓글