728x90
🔗 Problem Link
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
❔Thinking
- 배추밭과 배추의 위치가 주어질 때, 배추를 보호하는 최소한의 배추흰지렁이 수를 반환한다.
- 배추흰지렁이는 인접한 모든 배추를 보호할 수 있다.
💻Solution
import sys
from collections import deque
input = sys.stdin.readline
dx = [-1,1,0,0]
dy = [0,0,-1, 1]
T = int(input())
for _ in range(T):
M, N, K = map(int, input().split())
# 배추밭 생성
graph = [[0] * M for _ in range(N)]
# 배추밭 배추 심기
for _ in range(K):
y, x = map(int, input().split())
graph[x][y] = 1
# bfs정의
def bfs(x, y):
q = deque([(x, y)])
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<M and graph[nx][ny] == 1:
graph[nx][ny] = 2
q.append((nx, ny))
# 배추흰지렁이 풀기
cnt = 0
for i in range(N):
for j in range(M):
if graph[i][j] == 1:
bfs(i, j)
cnt += 1
print(cnt)
🗝️keypoint
- 배추가 심어진 위치 주위에 모든 배추 위치를 파악하는 bfs 알고리즘을 활용할 수 있다.
- bfs에서 해당 위치의 방문처리는, 큐에 append하면서 진행해야 중복 방문을 막을 수 있다.
- (0,0) (0,1) (1,0) (1,1) 각 위치에 배추가 있을 때 popleft 후에 방문처리를 한다면 (1,0) (1,1)는 다시 방문해야 한다.
'코딩테스트 > Python' 카테고리의 다른 글
[Baekjoon] 1389. 케빈 베이컨의 6단계 법칙 (0) | 2023.01.30 |
---|---|
[Programmers] Level 3. 경주로 건설 (0) | 2023.01.20 |
[Programmers] Level 3. 합승 택시 요금 (0) | 2023.01.19 |
[Programmers] Level 3. 여행경로 (0) | 2023.01.18 |
[Programmers] Level 4. 가사 검색 (0) | 2023.01.12 |