백준 1012 : 유기농 배추 파이썬 풀이(bfs 알고리즘)
백준 1012 번 유기농 배추문제입니다.
https://www.acmicpc.net/problem/1012
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
입력은 첫 째줄은 테스트 케이스의 개수, 그 다음은 M, N, K 로 입력 받으며 가로길이 세로길이 배추의 개수입니다.
가로 길이가 M 세로 길이가 N 이라고 해서 헷갈렸는데 가로의 개수가 M개로 생각하면 됩니다.
2
10 8 17
0 0
1 0
1 1
4 2
4 3
4 5
2 4
3 4
7 4
8 4
9 4
7 5
8 5
9 5
7 6
8 6
9 6
10 10 1
5 5
출력
5
1
deque() 를 사용했고 상하좌우를 확인하며 주변에 1이 있는지 확인하는 방법입니다.
배추 뭉텅이가 있는 곳이 끝나면 한 번의 bfs() 함수는 끝나게 되고 또 반복됩니다. 반복된 개수를 cnt 변수에 넣어주었습니다.
from collections import deque
n = int(input())
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
#bfs로 해결
def bfs(graph, x, y):
queue = deque()
queue.append((x, y))
graph[x][y] = 0
while queue:
x, y = queue.popleft()
for i in range(4):
nx = dx[i] + x
ny = dy[i] + y
if nx < 0 or nx >= m or ny < 0 or ny >= n:
continue
if graph[nx][ny] == 1:
graph[nx][ny] = 0
queue.append((nx, ny))
for i in range(n):
result = []
cnt = 0
m, n, k = map(int, input().split())
#행렬 만들기
li = [[0] * n for i in range(m)]
for j in range(k):
x, y = map(int, input().split())
li[x][y] = 1
for j in range(m):
for z in range(n):
if li[j][z] == 1:
bfs(li, j, z)
cnt += 1
print(cnt)
이 문제는 바이러스 문제 풀이와 매우 유사했습니다.
https://www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어
www.acmicpc.net
바이러스 문제를 풀이한 글입니다.
https://p-kyung.tistory.com/46
백준 2606번 : 바이러스 python 문제 풀이 (bfs 알고리즘)
백준 2606 문제입니다. https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄
p-kyung.tistory.com