[파이썬 알고리즘 문제풀이] - Section3 / 탐색 & 시뮬레이션 -9

Chooooo·2023년 1월 25일
0

🎈 봉우리

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

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

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

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

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

data.insert(0, [0] * N)
data.append([0] * N)

for i in range(N+2):
    data[i].insert(0, 0)
    data[i].append(0)
#입력 받은 후에 주변을 0으로 다 메꾸는거 추가했어야함.

cnt = 0
dx = [-1,0,1,0]
dy = [0,1,0,-1]
#상하좌우를 감지 하기 위해 방향 좌표 설정! 앞으로 상하좌우를 탐색할 때 필수라고 생각하기.
for i in range(1, N+1):
    for j in range(1, N+1):
        # if all(data[i][j] > data[i+dx[k]][j+dy[k]] for k in range(4)): #상하좌우 조건 모두 참일 때 !!!
        #     cnt += 1
        flag = 0
        for k in range(4):
            if data[i][j] > data[i+dx[k]][j+dy[k]]:
                flag += 1
        if flag == 4: #이렇게 4가지 방향을 설정해도 ok
            cnt += 1
            
            
print(cnt)

🎃 코멘트
먼저 입력받은 이후에 상하좌우 0을 추가해주는 코드를 써줬어야 했다.
그리고 해당 문제에서 특정한 좌표를 기준으로 상하좌우를 비교하는 조건이 있었다. 앞으로 상하좌우를 탐색할 때 방향좌표 설정 필수라고 생각하고 dx,dy 방향 좌표 설정 잊지말자. (방향좌표를 설정하면 풀기 매우 편해진다.)

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글