[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.

Comments