[Python]백준 1245: 농장 관리
https://www.acmicpc.net/problem/1245
1245번: 농장 관리
첫째 줄에 정수 N(1 < N ≤ 100), M(1 < M ≤ 70)이 주어진다. 둘째 줄부터 N+1번째 줄까지 각 줄마다 격자의 높이를 의미하는 M개의 정수가 입력된다. 격자의 높이는 500보다 작거나 같은 음이 아닌 정수
www.acmicpc.net
ANS
dir = [(0,1),(0,-1),(-1,0),(1,0),(1,1),(1,-1),(-1,1),(-1,-1)] #8방향 탐색
def dfs(r,c):
global peak
st = []
visited[r][c] = True
for k in range(8):
nr = r + dir[k][0]
nc = c + dir[k][1]
if 0<=nr<N and 0<=nc<M:
if arr[r][c] < arr[nr][nc]:
peak = False
if not visited[nr][nc] and arr[nr][nc] == arr[r][c]:
dfs(nr,nc)
#8방향 탐색해서 봉우리 찾기
#봉우리? 같은 높이를 가지는 하나 혹은 인접한 격자... 산봉우리와 인접한 격자는 산봉우리보다 낮아야 한다.
N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
visited = [[False] * M for _ in range(N)]
cnt = 0
for r in range(N):
for c in range(M):
if arr[r][c] >0 and not visited[r][c]:
peak = True
dfs(r,c)
if peak:
cnt += 1
print(cnt)
간만에 DFS로 푼 문제! 산봉우리를 찾을 때까지 계속해서 재귀를 타고 들어간다. 재귀 후 Peak이 True라면 cnt를 1씩 올려준 후 cnt를 출력한다.
'알고리즘 > 백준' 카테고리의 다른 글
| [Python] 백준 15663: N과 M(9) (0) | 2024.01.22 |
|---|---|
| [Python] 백준 10610 : 30 (0) | 2023.06.04 |
| [Python] 백준 : 13164 행복 유치원 (0) | 2023.05.14 |
| [Python] 백준 2468 : 안전 영역 (0) | 2023.05.11 |
| [Python] 백준 12919: A와 B 2 (0) | 2023.05.08 |
TAGS.
