(DFS) 백준 10026번 적록색약

DARTZ·2022년 4월 25일
0

알고리즘

목록 보기
18/135
import sys
import copy
sys.stdin = open('in.txt', 'rt')
sys.setrecursionlimit(3000)
n = int(input())

dfs_list = []
answer = []

for _ in range(n):
    dfs_list.append(list(input()))

first = copy.deepcopy(dfs_list)
second = copy.deepcopy(dfs_list)

for i in range(n):
    for k in range(n):
        if second[i][k] == 'G':
            second[i][k] = 'R'

for_list = []

for_list.append(first)
for_list.append(second)


def dfs(x, y, color, current_list):
    global count

    if x >= n or x < 0 or y >= n or y < 0:
        return False

    if current_list[x][y] == 0:
        return False

    elif current_list[x][y] == color:
        current_list[x][y] = 0

        dfs(x+1, y, color, current_list)
        dfs(x-1, y, color, current_list)
        dfs(x, y+1, color, current_list)
        dfs(x, y-1, color, current_list)

        return True

    else:
        return False


for f in for_list:
    count = 0
    for i in range(n):
        for k in range(n):
            current = f[i][k]
            response = dfs(i, k, current, f)
            if current != 0:
                count += 1
    answer.append(count)

for _ in answer:
    print(_, end=" ")

문제 자체는 어렵지 않았지만 정상일때와 색맹일 때와 구별을 해서 작성을 해야해서 어떻게 해줄까 고민하다가 그냥 제일 클래식한 방법으로 copy 모듈을 import 해서 배열을 2개 만들어서 진행했다.

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글