반응형
https://www.acmicpc.net/problem/10026
답안
import sys
sys.setrecursionlimit(10**4)
def dfs_R(x,y):
if x < 0 or y < 0 or x >= n or y >= n:
return False
if graph[x][y] == 'R':
graph[x][y] = 'C'
dfs_R(x-1,y)
dfs_R(x,y-1)
dfs_R(x+1,y)
dfs_R(x,y+1)
return True
return False
def dfs_G(x,y):
if x < 0 or y < 0 or x >= n or y >= n:
return False
if graph[x][y] == 'G':
graph[x][y] = 'C'
dfs_G(x-1,y)
dfs_G(x,y-1)
dfs_G(x+1,y)
dfs_G(x,y+1)
return True
return False
def dfs_B(x,y):
if x < 0 or y < 0 or x >= n or y >= n:
return False
if graph[x][y] == 'B':
graph[x][y] = 'C'
dfs_B(x-1,y)
dfs_B(x,y-1)
dfs_B(x+1,y)
dfs_B(x,y+1)
return True
return False
def dfs_R_G(x,y):
if x < 0 or y < 0 or x >= n or y >= n:
return False
if graph2[x][y] == 'R' or graph2[x][y] == 'G':
graph2[x][y] = 'C'
dfs_R_G(x-1,y)
dfs_R_G(x,y-1)
dfs_R_G(x+1,y)
dfs_R_G(x,y+1)
return True
return False
def dfs_B2(x,y):
if x < 0 or y < 0 or x >= n or y >= n:
return False
if graph2[x][y] == 'B':
graph2[x][y] = 'C'
dfs_B2(x-1,y)
dfs_B2(x,y-1)
dfs_B2(x+1,y)
dfs_B2(x,y+1)
return True
return False
result = 0
n = int(input())
graph = []
graph2 = []
for _ in range(n):
k = input()
graph.append(list(k))
graph2.append(list(k))
#RGB
for i in range(n):
for j in range(n):
if dfs_R(i,j):
result += 1
for i in range(n):
for j in range(n):
if dfs_G(i,j):
result += 1
for i in range(n):
for j in range(n):
if dfs_B(i,j):
result += 1
print(result, end = ' ')
result = 0
#RRB
for i in range(n):
for j in range(n):
if dfs_R_G(i,j):
result += 1
for i in range(n):
for j in range(n):
if dfs_B2(i,j):
result += 1
print(result)
좀 길어 보이지만 반복된 게 많이 쓰였기 때문에 간단한 코드이다.
그래프를 2개 만들어서 앞 케이스, 뒤 케이스 따로따로 탐색을 진행하였다.
탐색하는 각 단어별로 DFS를 해주었고, 탐색이 끝난 위치는 'C'로 변경해 주었다.
좀 무지성으로 한 것 같긴 한데.. 시간이 없어서 아는 대로만 쉽게 짰다!
반응형
'BOJ > Python' 카테고리의 다른 글
백준 10815번 숫자 카드 파이썬 (0) | 2022.02.14 |
---|---|
백준 2609번 최대공약수와 최소공배수 파이썬 (0) | 2022.02.11 |
백준 10989번 수 정렬하기 3 파이썬 (0) | 2022.02.09 |
백준 1929번 소수 구하기 파이썬 (0) | 2022.02.08 |
백준 4963번 섬의 개수 파이썬 DFS (0) | 2022.02.07 |