봉우리

개발새발개발러·2022년 5월 6일
0

알고리즘

목록 보기
10/11
post-thumbnail

문제

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

입력설명

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

출력설명

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

입력예제 1

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

출력예제 1

10

풀이

import sys
sys.stdin = open("input.txt","rt")

n = int(input())
a = [list(map(int, input().split())) for _ in range(n)]

# 2차원 배열 a의 상,하 0으로 초기화
a.insert(0, [0]*n)
a.append([0]*n)

# 2차원 배열 a의 좌,우 0으로 초기화
for i in range(0,len(a)):
    a[i].insert(0,0)
    a[i].append(0)

# 봉우리 개수 변수
cnt = 0

# 0으로 초기화 된 영역을 제외한 2차원 배열 2중 for문
for i in range(1,n+1):
    for j in range(1,n+1):
        # 요소의 상,하,좌,우 영역 배열에 append후 해당 요소가 배열에서 최대값일 경우
        # cnt +1처리
        arr = []
        arr.append(a[i-1][j])
        arr.append(a[i+1][j])
        arr.append(a[i][j-1])
        arr.append(a[i][j+1])
        if max(arr)<a[i][j]:
            cnt += 1
print(cnt)

풀이2

import sys
sys.stdin = open("input.txt","rt")

n = int(input())
a = [list(map(int, input().split())) for _ in range(n)]

# 2차원 배열 a의 상,하 0으로 초기화
a.insert(0, [0]*n)
a.append([0]*n)

# 2차원 배열 a의 좌,우 0으로 초기화
for i in range(0,len(a)):
    a[i].insert(0,0)
    a[i].append(0)

# 봉우리 개수 변수
cnt = 0

# x축 y축   
dx=[-1,0,1,0]
dy=[0,1,0,-1]

# 0으로 초기화 된 영역을 제외한 2차원 배열 2중 for문
for i in range(1,n+1):
    for j in range(1,n+1):
        # python all()함수=> 함수안에 조건이 모두 참일때만 true로 반환
        # 상하좌우 4방향 탐색
        if all(a[i][j]>a[i+dx[k]][j+dy[k]] for k in range(4)):
            cnt += 1
print(cnt)

0개의 댓글