알고리즘 문제 풀기/백준(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)
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net