본문 바로가기
알고리즘/dfs,bfs

[파이썬🐍] 백준 10026 : 적록색약

by 코딩개미뚠뚠 2021. 4. 10.
반응형

후 아슬아슬하게 올릴 수 있겠다^^

오늘은 토스 시험도 보고 오고 아주 바쁜 하루를 보내서 늦어졌다.

그래도 포스팅 잊지 않은 나 칭찬해!

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시 전에 포스팅하고 생각해보고 더 효율적인 코드를 생각해내면 다시 추가로 올려야지!

 

반응형

댓글