-
[백준] 10026번 문제 (적록색약) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 15. 16:13
https://www.acmicpc.net/problem/10026
from collections import deque dx = [0, 0, -1, 1] dy = [-1, 1, 0, 0] def bfs(i, j, v, arr): q = deque() q.append([i, j]) arr[i][j] = 0 while q: a, b = q.popleft() for k in range(4): x = a + dx[k] y = b + dy[k] if 0 <= x < n and 0 <= y < n and arr[x][y] == v: q.append([x, y]) arr[x][y] = 0 n = int(input()) rgb = [list(input()) for _ in range(n)] copy = [[0] * n for i in range(n)] for i in range(n): for j in range(n): if rgb[i][j] == "R" or rgb[i][j] == "G": copy[i][j] = 1 else: copy[i][j] = 2 count = 0 count_rg = 0 for i in range(n): for j in range(n): if rgb[i][j] != 0: bfs(i, j, rgb[i][j], rgb) count += 1 if copy[i][j] != 0: bfs(i, j, copy[i][j], copy) count_rg += 1 print(count, count_rg)
코드는 길지만 일반적인 그래프 탐색 문제다.
필자같은 경우는 bfs로 풀었지만, dfs도 상관없다.
우선 색약인 경우를 생각하지 않고 bfs로 구역의 개수를 구해주고,
색약인 경우의 구역의 개수를 구하기 위해 R을 G로(또는 G를 R로) 변경해주고 똑같이 탐색을 진행하면 된다.
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 10988번 문제 (팰린드롬인지 확인하기) 파이썬(Python) 풀이 (0) 2021.09.23 [백준] 17608번 문제 (막대기) 파이썬(Python) 풀이 (0) 2021.09.15 [백준] 1032번 문제 (명령 프롬프트) 파이썬(Python) 풀이 (0) 2021.09.15 [백준] 1012번 문제 (유기농 배추) 파이썬(Python) 풀이 (0) 2021.09.15 [백준] 1904번 문제 (01타일) 파이썬(Python) 풀이 (0) 2021.09.14