[백준] 1012 - 유기농 배추 (Python)

2023. 11. 21. 19:02· 알고리즘/백준
목차
  1. 문제 설명
  2. 문제 풀이
728x90

문제 설명

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

 

1012번: 유기농 배추

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

www.acmicpc.net


문제 풀이

이 문제는 BFS, DFS 두 방법 다 사용 가능하다

그래서 두 가지 방법으로 풀어보았다! 

 

1. DFS

배추가 심어진 땅의 개수를 구하는 것이기 때문에 가장 먼저 DFS로 푸는 방법을 떠올렸다

재귀를 돌면서 아직 방문하지 않았으면서 값이 1인 부분을 찾고, 재귀가 끝나면 return True를 해준다

반복문으로 dfs 함수를 호출해 true면 result를 증가해준다

import sys
sys.setrecursionlimit(10000)
def dfs(x, y):
if x < 0 or x >= n or y < 0 or y >= m:
return False
if not visited[x][y] and ground[x][y] == 1:
visited[x][y] = True
for p in range(4):
nx = x + dx[p]
ny = y + dy[p]
dfs(nx, ny)
return True
return False
TC = int(input())
for t in range(TC):
m, n, k = map(int, input().split())
ground = [[0] * m for _ in range(n)]
visited = [[False] * m for _ in range(n)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
for i in range(k):
a, b = map(int, input().split())
ground[b][a] = 1
result = 0
for i in range(m):
for j in range(n):
if dfs(j, i):
result += 1
print(result)

 

 

 

2. BFS

BFS는 상하좌우를 확인하면서 아직 방문하지 않았고, 값이 1이면 큐에 넣어주고 

큐에서 pop해가면서 확인하면 된다

넘 쉬운 문제

from collections import deque
def bfs(x, y):
queue = deque()
queue.append((x, y))
visited[x][y] = True
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] == 1 and not visited[nx][ny]:
queue.append((nx, ny))
visited[nx][ny] = True
return True
T = int(input())
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
for t in range(T):
m, n, k = list(map(int, input().split()))
graph = [[0 for _ in range(m)] for __ in range(n)]
visited = [[False] * m for _ in range(n)]
point = []
result = 0
for _ in range(k):
a, b = map(int, input().split())
graph[b][a] = 1
point.append((b, a))
for p in point:
a, b = p
if not visited[a][b] and graph[a][b] == 1:
bfs(a, b)
result += 1
print(result)

 

 

 

참고로 검색 대상이 엄청 크지 않으면 단순 속도는 BFS가 더 빠르다

728x90
저작자표시 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 2579 - 계단 오르기 (Python)  (1) 2023.11.21
[백준] 9095 - 1, 2, 3 더하기 (Python)  (0) 2023.11.21
[백준] 1463 - 1로 만들기 (Python)  (1) 2023.11.20
[백준`G5] 10026 - 적록색약 (Python)  (0) 2023.11.18
[백준] 1697 - 숨바꼭질 (Python)  (2) 2023.11.14
  1. 문제 설명
  2. 문제 풀이
'알고리즘/백준' 카테고리의 다른 글
  • [백준] 2579 - 계단 오르기 (Python)
  • [백준] 9095 - 1, 2, 3 더하기 (Python)
  • [백준] 1463 - 1로 만들기 (Python)
  • [백준`G5] 10026 - 적록색약 (Python)
셰욘
셰욘
셰욘
seiyeon
셰욘
전체
오늘
어제
  • 분류 전체보기 (174)
    • 알고리즘 (46)
      • 프로그래머스 (2)
      • 백준 (37)
      • 문제 유형 (7)
    • CS (41)
      • Linux (6)
      • DB (15)
      • 자료구조 (3)
      • OOP (2)
      • 아키텍처 (0)
    • BE (42)
      • Java (9)
      • Spring Boot (32)
    • FE (18)
      • Next.js (1)
      • JavaScript (5)
      • Vue.js (7)
      • Web (0)
    • 배포 (5)
    • 회고 (18)
      • BEYOND SW 캠프 (18)
    • 기타 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그 관리

공지사항

인기 글

태그

  • js
  • 회고
  • 티스토리챌린지
  • AWS
  • spring boot
  • 자료구조
  • fe
  • 리눅스
  • 알고리즘
  • 백준
  • web
  • 그리디
  • dfs
  • Gateway
  • cs
  • 백트래킹
  • 우선순위 큐
  • db
  • vue
  • be
  • Java
  • 네트워크
  • 오블완
  • bfs
  • 실습
  • 주간회고
  • 구현
  • 트리
  • DP
  • 프로그래머스

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.1
셰욘
[백준] 1012 - 유기농 배추 (Python)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.