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

입력설명

첫 줄에 자연수 N이 주어진다.(1<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는 다.

 

출력설명

봉우리의 개수를 출력하세요.

 

입력예제

5
5 3 7 2 3
3 7 1 6 1
7 2 5 3 4
4 3 6 4 1
8 7 3 5 2

 

출력예제

10

 

풀이

 >> 0으로 초기화한 (n+2)*(n+2) 배열 생성해서 0을 채워준

 >> 0인 (n+2)*(n+2) 배열에 i:1,j:1 부터~i:n+1, j:n+1만큼 진짜 값 채워줌

 >> top(arr[i-1][j]), bottom(arr[i+1][j]), left(arr[i][j-1]), right(arr[i][j+1]) 와 position(arr[i][j]) 값을 비교해서 큰 값 찾기

  * 끝에 0 없는건 if문으로 조건을 만들 수 없음! 연구 필요

import sys
sys.stdin = open('input.txt', 'r')
n = int(input())
arr=[[0]*(n+2) for _ in range(n+2)]                         #0으로 초기화한 (n+2)*(n+2) 배열 생성
a = [list(map(int, input().split())) for _ in range(n)]     #진짜 값이 들어있는 배열

position = 0
count = 0

for i in range(0, n):       #0인 (n+2)*(n+2) 배열에 i:1,j:1 부터~i:n+1, j:n+1만큼 진짜 값 채워주기
    for j in range(0, n):
        arr[i+1][j+1] = a[i][j]

for i in range(1, n+1):
    for j in range(1, n+1):
        position = arr[i][j]
        #   top,                        bottom,                      left,                        right 값 비교
        if (arr[i-1][j] < position) and (arr[i+1][j] < position) and (arr[i][j-1] < position) and (arr[i][j+1] < position):
            print(i, j, ':', position)
            count += 1      #카운트 +1
print(count)

 

선생님 풀이

 >> 위, 오른쪽, 아래, 왼쪽 좌표값을 dx, dy를 만들어서 배열에 입력

 >> if all( arr[i][j] > arr[i+dx[k]][j+dy[k]] for k in range(4) )를 이용해서 이동하면서 현재값이랑 비교

   - arr[i+dx[k]][j+dy[k]] for k in range(4)

    - k의 값은 k가 0이면 top(-1, 0), 1이면 right(0, 1), 2이면 bottom(1, 0), 3이면 left(0, -1)

    - 이 값이 4번 반복하면서 i, j를 변경시키면서 포지션이 변경된다

import sys
sys.stdin = open('input.txt', 'r')
dx = [-1, 0, 1, 0]      #top(-1, 0) right(0, 1) bottom(1, 0) left(0, -1)
dy = [0, 1, 0, -1]
n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
count = 0

#격자의 가장자리는 0으로 초기화 되었다고 가정
arr.insert(0, [0]*n)    #첫번째 행에 0을 n개 만큼 삽입하기
arr.append([0]*n)       #마지막 행에 0을 n개 만큼 삽입하기
for i in arr:
    i.insert(0, 0)      #맨 왼쪽(맨앞)에 0 삽입
    i.append(0)         #맨 오른쪽(맨뒤)에 0 삽입

#★★★★★★★이동 시키면서 비교하기★★★★★★★
for i in range(1, n+1):
    for j in range(1, n+1):
        #현재 값과 dx, dy 비교(k는 안에 있는 0~3값(-1, 0, 1, 0))
        #4번 반복하면서 모두가 참일때 all이 참
        if all( arr[i][j] > arr[i+dx[k]][j+dy[k]] for k in range(4) ):      #all()은 안에 있는 모든 조건이 참일때 참으로 반환
            count += 1
print(count)
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_10_봉우리