반응형
SMALL
백준 10026번 <적록색약> 문제 보기
https://www.acmicpc.net/problem/10026
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
백준 10026번 <적록색약> 문제 풀이
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
from collections import deque
n = int(input())
array = [list(map(str, input().strip())) for _ in range(n)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
visited = [[False]*n for _ in range(n)]
queue = deque()
def dfs(x, y):
queue.append((x, y))
while queue:
x, y = queue.popleft()
value = array[x][y]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<n and 0<=ny<n and visited[nx][ny]==False:
if array[nx][ny] == value:
visited[nx][ny] = True
dfs(nx, ny)
check = 0
for i in range(n):
for j in range(n):
if visited[i][j] == False:
dfs(i, j)
check += 1
print(check, end = " ")
for i in range(n):
for j in range(n):
if array[i][j] == 'R':
array[i][j] = 'G'
visited = [[False]*n for _ in range(n)]
check = 0
for i in range(n):
for j in range(n):
if visited[i][j] == False:
dfs(i, j)
check += 1
print(check)
DFS(깊이 우선 탐색) 알고리즘이다. 탐색 가능한 부분까지 전부 DFS를 재귀로 진행한다. visited가 false인 곳을 탐색하며 영역이 몇개인지 개수를 셀 수 있다. 일반 사람들 기준으로 개수를 세고, R을 G로 전부 바꾸거나 G를 R로 전부 바꾼 후 적록색약 사람들 기준으로 개수를 세어 두 값을 반환하면 된다.
반응형
LIST
'알고리즘 공부 > 코딩테스트(백준)' 카테고리의 다른 글
[백준 11725번] 트리의 부모 찾기 (Python 파이썬) 풀이 방법 (0) | 2023.02.18 |
---|---|
[백준 1260번] DFS와 BFS (Python 파이썬) 풀이 방법 (0) | 2023.02.13 |
[백준 11724번] 연결 요소의 개수 (Python 파이썬) 풀이 방법 (0) | 2023.02.13 |
[백준 11660번] 구간 합 구하기 5 (Python 파이썬) 풀이 방법 (0) | 2023.02.02 |
[백준 1463번] 1로 만들기 (Python 파이썬) 풀이 방법 (0) | 2023.01.19 |