728x90
문제
https://www.acmicpc.net/problem/10026
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
문제 풀이
DFS 알고리즘 적용!
2022.07.12 - [PS/알고리즘 이론] - [파이썬으로 배우는 알고리즘] DFS(깊이 우선 탐색)
[파이썬으로 배우는 알고리즘] DFS(깊이 우선 탐색)
DFS란? DFS(Depth First Search)는 그래프의 모든 노드를 탐색하는 방법 중 하나로, 깊이를 우선으로 탐색한 후 더 이상 탐색할 노드가 없다면 이전으로 돌아가 탐색을 이어나가는 탐색 알고리즘입니다.
c4u-rdav.tistory.com
적록색약인 사람은 빨간색과 초록색의 차이를 거의 못 느끼기 때문에 일반 사람들이 보는 그리드 A에서 초록색을 모두 빨간색으로 바꿔 구역의 수를 구해주면 됩니다.
1) 일반 사람들이 보는 그리드 a를 입력 받는다.
2) 그리드 a에서 초록색을 모두 빨간색으로 바꾼 그리드 b를 만든다.
3) 각각 그리드에서 방문 여부를 체크하는 visited 리스트를 생성한다.
4) DFS 알고리즘을 적용하여 구역의 수를 구한다.
구현
코드
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
def dfs(board, visited, pos, color):
tx, ty = pos
board[tx][ty] = '-'
visited[tx][ty] = True
for k in range(4):
x = tx + dx[k]
y = ty + dy[k]
if 0 <= x < N and 0 <= y < N and board[x][y] == color and not visited[x][y]:
dfs(board, visited, (x, y), color)
if __name__ == "__main__":
colors = ['R', 'G', 'B']
N = int(input())
a = list(list(map(str, input().rstrip())) for _ in range(N))
b = [[''] * N for _ in range(N)]
# 적록색약이 보는 그리드를 구해주는 작업
for i in range(N):
for j in range(N):
if a[i][j] == 'R' or a[i][j] == 'G':
b[i][j] = 'R'
else:
b[i][j] = 'B'
visited_a = [[False] * N for _ in range(N)]
visited_b = [[False] * N for _ in range(N)]
res_a = 0
res_b = 0
for i in range(N):
for j in range(N):
if a[i][j] in colors:
res_a += 1
if a[i][j] == 'R':
dfs(a, visited_a, (i, j), 'R')
elif a[i][j] == 'G':
dfs(a, visited_a, (i, j), 'G')
elif a[i][j] == 'B':
dfs(a, visited_a, (i, j), 'B')
if b[i][j] in colors:
res_b += 1
if b[i][j] == 'R':
dfs(b, visited_b, (i, j), 'R')
elif b[i][j] == 'B':
dfs(b, visited_b, (i, j), 'B')
print(res_a, res_b)
결과
728x90
반응형
'PS > 백준' 카테고리의 다른 글
[백준(BOJ)] #1520- 내리막 길 (파이썬, Python3) (0) | 2022.11.16 |
---|---|
[백준(BOJ)] #4485- 녹색 옷 입은 애가 젤다지? (파이썬, PyPy3) (0) | 2022.11.16 |
[백준(BOJ)] #2014- 소수의 곱 (파이썬, PyPy3) (0) | 2022.11.12 |
[백준(BOJ)] #1507- 궁금한 민호 (파이썬, PyPy3) (0) | 2022.11.11 |
[백준(BOJ)] #1561- 놀이 공원 (파이썬, PyPy3) (0) | 2022.11.09 |