반응형
후 아슬아슬하게 올릴 수 있겠다^^
오늘은 토스 시험도 보고 오고 아주 바쁜 하루를 보내서 늦어졌다.
그래도 포스팅 잊지 않은 나 칭찬해!
from collections import deque
n = int(input())
grim = [list(input()) for _ in range(n)]
visited = [[0]*n for _ in range(n)]
dx = [-1,1,0,0]
dy = [0,0,-1,1]
cnt1,cnt2 = 0,0
q = deque()
def bfs(i,j):
q.append([i,j])
visited[i][j] = 1
while q:
x,y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if (0 <= nx < n) and (0 <= ny < n):
if visited[nx][ny] == 0 and grim[x][y] == grim[nx][ny]:
visited[nx][ny] = 1
q.append([nx,ny])
for i in range(n):
for j in range(n):
if visited[i][j] == 0:
bfs(i,j)
cnt1+= 1
for i in range(n):
for j in range(n):
if grim[i][j] == 'R':
grim[i][j] = 'G'
visited=[[0]*n for _ in range(n)]
for i in range(n):
for j in range(n):
if visited[i][j] == 0:
bfs(i, j)
cnt2+=1
print(cnt1,cnt2)
이 문제는 생각보다 재밌었다.
포스팅한 문제들에서 조건 하나만 바꿔주면 해결된다.
if visited[nx][ny] == 0 and grim[x][y] == grim[nx][ny]:
바로 이 부분!
연결문제가 아니기에 grim[x][y] == grim[nx][ny] 이 조건을 추가로 넣어주는 것
for i in range(n):
for j in range(n):
if grim[i][j] == 'R':
grim[i][j] = 'G'
이렇게 적록색약을 위한 초기화도 해준다.
근데 조금 더 효율적인 코드를 짤 수 있을 것 같기도 하다.
일단 12시 전에 포스팅하고 생각해보고 더 효율적인 코드를 생각해내면 다시 추가로 올려야지!
반응형
'알고리즘 > dfs,bfs' 카테고리의 다른 글
[파이썬🐍] 백준 4963 : 섬의 개수 (0) | 2021.04.12 |
---|---|
[파이썬🐍] 백준 2644 : 촌수계산 (0) | 2021.04.11 |
[파이썬🐍] 백준 2583 : 영역 구하기 (0) | 2021.04.09 |
[파이썬🐍] 백준 11724 : 연결 요소의 개수 (0) | 2021.04.08 |
[파이썬🐍] 백준 2606 : 바이러스 (0) | 2021.04.08 |
댓글