하루일문
[백준] 10026번 적녹색약 (파이썬) 본문
문제
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
코드
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
def DFS(graph, visited, i, j):
visited[i][j] = 1
for _ in range(4):
nx = i + dx[_]
ny = j + dy[_]
if 0 <= nx < N and 0 <= ny < N and graph[i][j] == graph[nx][ny] and not visited[nx][ny]:
DFS(graph, visited, nx, ny)
N = int(input())
graph = [list(input().strip()) for _ in range(N)]
visited = [[0] * N for _ in range(N)]
visited_2 = [[0] * N for _ in range(N)]
cnt = 0
for i in range(N):
for j in range(N):
if not visited[i][j]:
DFS(graph, visited, i, j)
cnt += 1
for i in range(N):
for j in range(N):
if graph[i][j] == "G":
graph[i][j] = "R"
cnt_2 = 0
for i in range(N):
for j in range(N):
if not visited_2[i][j]:
DFS(graph, visited_2, i, j)
cnt_2 += 1
print(cnt, cnt_2)
해설
DFS로 풀었다.
위에서 전체로 나뉘는 부분을 구했다.
다른방법을 고민해 봤지만 초록을 빨강으로 바꿔주고 다시 돌아주는게 좋을 것 같아서 바꾸고 똑같이 돌아줬다.
'algorithm > baekjoon' 카테고리의 다른 글
[백준] 5014번 스타트링크 (파이썬) (0) | 2023.03.25 |
---|---|
[백준] 1914번 하노이 탑 (파이썬) (1) | 2023.03.24 |
[백준] 1743번 음식물 피하기(파이썬) (0) | 2023.03.21 |
[백준] 1259번 팰린드롬수 (파이썬) (0) | 2023.03.20 |
[백준] 10172번 개 (파이썬) (0) | 2023.03.19 |