알고리즘/백준
[Python]백준 1245: 농장 관리
suwonieee
2023. 5. 22. 11:19
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를 출력한다.