알고리즘 문제 풀기/백준(Baekjoon)

[백준 알고리즘] 10026. 적록색약 - 파이썬, DFS

hibscus 2021. 3. 8. 23:20

 

 

 

 

🎈 처음에 sys.sys.setrecursionlimit(10000000) 설정해주지 않아 런타임에러가 걸렸다.

 

 

🎈 예제나 다른 복잡한 반례를 넣어봤을 때는 다 맞았는데, 제출하자마자 바로 틀렸다고 해서 처음에 조금 헤맸다.

 

- > 원인을 찾아보니 for 문에서 iterator 반환 변수와 변수를 혼용해서 썼다..

 

 

 

 

이런 기초적인 것들(?) 혹은 오타 때문에 생기는 오류들 때문에 때로는 문제푸는데 필요없이 오래걸리곤 한다... ㅠ

다신 까먹지 말자...ㅎㅎ

 

 

 

혹시 필요한 분들을 위해.. 제 오류를 찾은 반례도 함께 남겨 놓겠습니다.(제가 반례찾는다고 엄청 헤맸거든요..ㅠ)

2

BR

GB

 

3 2

 

 

 

 

 

💻 딕셔너리를 사용해서 적록색약이 보는 R, G의 값은 동일하게, 일반 사람이 보는 R, G의 값을 다르게 설정했다.

 

확실히 딕셔너리를 사용해 컬러의 값을 나타내니 눈에 잘 들어온다.

 

import sys
import copy
sys.setrecursionlimit(100000000)

def color_segment():
    stack = []
    arr = copy.deepcopy(array)
    cnt = 0
    for i in range(N):
        for j in range(N):
            if arr[i][j] in color:
                cnt += 1
                color_num = color[arr[i][j]]
                arr[i][j] = color_num
                stack.append((i, j))
                while stack:
                    r, c = stack.pop()
                    for k in range(4):
                        nr = r + delta[k][0]
                        nc = c + delta[k][1]
                        if 0 <= nr < N and 0 <= nc < N:
                            if arr[nr][nc] in color and color[arr[nr][nc]] == color_num:
                                arr[nr][nc] = color_num
                                stack.append((nr, nc))
    return cnt
    
    
delta = [(1, 0), (-1, 0), (0, 1), (0, -1)]

N = int(input())
array = []
for _ in range(N):
    array.append(list(input()))

color = {'R': 0, 'G':1, 'B':2 }
normal = color_segment()
color = {'R': 0, 'G':0, 'B':2 }
color_blindness = color_segment()

print(normal, color_blindness)

 

 

www.acmicpc.net/problem/10026

 

10026번: 적록색약

적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)

www.acmicpc.net