반응형
import sys
from collections import deque
input = sys.stdin.readline
dx = [0,0,1,-1]
dy = [1,-1,0,0]
matrix = []
n,m = map(int,input().split())
for _ in range(n):
matrix.append(list(map(int,input().split())))
count = 0
def bfs(sx,sy):
queue = deque()
queue.append((sx,sy))
matrix[sy][sx] = 1
while queue:
nx,ny = queue.popleft()
for i in range(4):
tx,ty = nx+dx[i], ny+dy[i]
if(tx == -1):
tx = m - 1
elif (tx == m):
tx = 0
if(ty == -1):
ty = n - 1
elif (ty == n):
ty = 0
if(matrix[ty][tx] == 0):
queue.append((tx,ty))
matrix[ty][tx] = 1
for y in range(n):
for x in range(m):
if (matrix[y][x] == 0):
bfs(x,y)
count += 1
print(count)
https://www.acmicpc.net/problem/10026
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
적록색약과 거의 비슷한 문제이다.
주의점은 영역이 도넛 형태로 되어있어서 (토러스) 상하좌우로 계속 이동해도 면을 벗어나지 않는 다는 점이다.
기존의 BFS를 작성하는 코드에서
1. 영역이 벗어나는 에러 케이스를 잡는 부분을 버리고,
2. 벗어날 시 위치를 이동시켜주는 코드를 추가해준 뒤
3. 모든 영역을 돌면서 비어 있는 공간마다 BFS를 적용시키면 된다. (돌때마다 카운트를 세주는건 덤)
728x90
'개발 > 문제풀이' 카테고리의 다른 글
[카카오 2023 BLIND RECRUITMENT, Python] 이모티콘 할인행사 문제풀이 (0) | 2023.03.07 |
---|---|
[BOJ 27210, Python] 신을 모시는 사당 풀이 (0) | 2023.02.01 |
백준 1697,12851,13913 파이썬 풀이 (숨바꼭질 1, 숨바꼭질 2, 숨바꼭질 3) (0) | 2021.04.08 |
백준 1927번 최소 힙 파이썬 문제풀이 (0) | 2021.02.15 |
2월 1주차 백준 문제풀이 파이썬(듣보잡, 회의실 배정, 바이러스, 최대 힙, 집합 연결요소의 개수, 좌표압축) (0) | 2021.02.08 |