티스토리 뷰

알고리즘

백준 1012 - 파이썬

취뽀가자!! 2023. 4. 29. 23:50

https://www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net

문제 풀이

이 문제는 2667 - 단지번호붙이기와 풀이 방식이 거의 유사했다. 기본적으로 BFS/DFS 문제들은 풀이 방식이 비슷한데 약간의 변화와 응용만 해주면 되는거 같다.

 

가장 먼저 떠오른 생각은 각 위치를 돌아다니며 1로 표시된 곳이 어딘지 확인해야 하기 때문에 기본적인 BFS 틀을 함수를 작성한 후에 dx와 dy라는 별도의 방향 리스트를 만들어 구현했다.

import sys
from collections import deque
input = sys.stdin.readline

def bfs(graph, x, y):
  dx = [0, 0, -1, 1]
  dy = [-1, 1, 0, 0]
  
  queue = deque()
  queue.append((x, y))

  graph[x][y] = 0

  while queue:
    x, y = queue.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

      if graph[nx][ny] == 0:
        continue

      else:
        graph[nx][ny] = 0
        queue.append((nx, ny))

T = int(input().rstrip())

for _ 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 i in range(n):
    for j in range(m):
      if graph[i][j] == 1:
        bfs(graph, i , j)
        cnt += 1
  
  print(cnt)

 

이번 문제를 풀면서 느낀점은 위에서 말했다시피 문제마다 조금씩 다르지 큰 틀은 비슷한거 같다. 그래도 아직은 BFS를 아무것도 참고하지 않고 구현하기에는 조금 부족하기에 좀더 자주 쳐보면서 익히도록 해야 되겠다.

'알고리즘' 카테고리의 다른 글

백준 1697 - 파이썬  (0) 2023.05.05
백준 7576 - 파이썬  (0) 2023.04.30
백준 2667 - 파이썬  (0) 2023.04.26
백준 2178 - 파이썬  (0) 2023.04.25
백준 1260 - 파이썬  (0) 2023.04.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함