Algorithm/Baekjoon

[Python] 10026. 적록색약

느낌표 공장장 2021. 12. 16. 22:56
dy = [1, 0, -1, 0]
dx = [0, 1, 0, -1]

def dfs(y, x):
    visited[y][x] = True
    for i in range(4):
        ny = dy[i] + y
        nx = dx[i] + x
        if 0 <= ny < n and 0 <= nx < n and not visited[ny][nx]:
            if grid[ny][nx] == grid[y][x]:  # 같은 색이면 탐색
                dfs(ny, nx)


n = int(input()) # 그리드 칸 n x n
grid = [list(input()) for _ in range(n)]   # 그리드

not_cw = cw = 0 # 적녹색약이 아닌 사람이 봤을때의 구역의 수, 적녹색약인 사람이 봤을 때의 구역의 수

# 적녹색약이 아닌 사람이 봤을 때
visited = [[False for _ in range(n)] for _ in range(n)]
for i in range(n):
    for j in range(n):
        if not visited[i][j]:   # 아직 방문안한 구역이라면
            dfs(i, j)   # 탐색
            not_cw += 1 # 구역 수  + 1

# 적녹색약인 사람이 봤을 때
for i in range(n):
    for j in range(n):
        if grid[i][j] == 'G':   # 적녹색 차이를 거의 느끼지 못하기 때문에 통일 시켜주기
            grid[i][j] = 'R'

visited = [[False for _ in range(n)] for _ in range(n)]
for i in range(n):
    for j in range(n):
        if not visited[i][j]:
            dfs(i, j)
            cw += 1

print(not_cw, cw)

'Algorithm > Baekjoon' 카테고리의 다른 글

[Python] 1504. 특정한 최단 경로  (0) 2021.12.16
[Python] 1244. 스위치 켜고 끄기  (0) 2021.12.16
[Python] 2805. 나무 자르기  (0) 2021.12.16
[Python] 9251. LCS  (0) 2021.12.16
[Python] 12865. 평범한 배낭  (0) 2021.12.16