[문제]
지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다.
봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요.
격자의 가장자리는 0으로 초기화 되었다고 가정한다. 만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다.

[풀이]
n = int(input())
a = [list(map(int, input().split())) for _ in range(n)]
dy = [0, 1, 0, -1]
dx = [1, 0, -1, 0]
cnt = 0
# 격자의 가장자리에 0 추가
a.insert(0, [0]*(n+2))
a.insert(len(a), [0]*(n+2)) # 맨 아랫줄에 0 추가
for i in range(1, n+1):
a[i].insert(0, 0)
a[i].append(0) # 각 리스트의 마지막 원소에 0 추가
for i in range(1, n+1):
for j in range(1, n+1):
if all(a[i][j] > a[i+dx[k]][j+dy[k]] for k in range(4)):
cnt += 1
print(cnt)
[내용]
1. 가장자리에 0을 넣는것까지는 했으나, 상하좌우 값 비교하는걸 제대로 하지 못했다.
: 이전에 bfs, dfs 문제 풀 때 상하좌우 비교하는것을 했었으나 all 이라는 함수를 이용해 상하좌우 값 비교하는것을 생각치도 못했다.
* # i+dx[k] : 행 / j+dy[k] : 열
- if 문과 all() 을 통해서 해당 조건이 모두 참이여야 cnt 값을 +1 하는 형식의 코드를 작성한다.
'Coding Test > Python' 카테고리의 다른 글
| [python] 랜선자르기(결정알고리즘) (0) | 2023.02.13 |
|---|---|
| [python] 이분검색 (0) | 2023.02.13 |
| [Python] 곳감(모래시계) (0) | 2023.02.06 |
| [Python] 사과나무(다이아몬드) (0) | 2023.02.01 |
| [Python] 격자판 최대합 (0) | 2023.01.31 |