728x90
https://www.acmicpc.net/problem/1012
문제 접근
- 이차원 배열에서 배추의 위치가 1로 주어질 때 인접한 배추가 몇 쌍인지를 구하면 되는 문제
- 모든 좌표를 확인해서 1일 때 인접한 1들을 전부 0으로 바꾸고 카운트를 증가시키는 방법으로 접근
- 인접한 1들의 상하좌우를 모두 탐색하기 위해 bfs 활용
정답 코드
from collections import deque
dx = [0,0,1,-1]
dy = [1, -1, 0,0]
t = int(input())
# 주변에 1들을 모두 0으로 만드는 메서드
def bfs(graph, a, b):
q = deque()
q.append((a,b))
graph[a][b] = 0
# 근처에 1이 없을때까지 반복
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx <0 or nx >= n or ny<0 or ny>= m:
continue
# 근처의 1들을 0으로 만들기
if graph[nx][ny] == 1:
graph[nx][ny] = 0
# 이동한 위치에서도 동서남북 검사하도록 큐에 추가
q.append((nx, ny))
return
for i in range(t):
cnt = 0
n, m, k = map(int, input().split())
# 이차원 배열 생셩
graph = [[0] * m for _ in range(n)]
# 지렁이 위치 추가
for j in range(k):
x, y = map(int, input().split())
graph[x][y] = 1
for a in range(n):
for b in range(m):
if graph[a][b] == 1:
# 주변 1들을 모두 0으로 만들기
bfs(graph, a, b)
cnt += 1
print(cnt)
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
백준 - 15736(청기 백기, 파이썬) (0) | 2023.07.29 |
---|---|
백준 - 3085(사탕 게임, 파이썬) (0) | 2023.07.28 |
백준 - 13458(시험 감독, python) (0) | 2023.06.19 |
백준 - 14888(연산자 끼워넣기, python) (0) | 2023.06.18 |
백준-14501(퇴사, python) (0) | 2023.06.18 |