본문 바로가기

Algorithm/파이썬 알고리즘 문제풀이

[python/inflearn/section3] 봉우리

본 내용은 파이썬 알고리즘 문제풀이 (코딩테스트 대비) 강의를 토대로 작성하였습니다.

이미지 클릭시, 강의로 이동됩니닷 :)

# 봉우리
import sys
#sys.stdin=open("input.txt", "r")
n = int(input())
a = [list(map(int, input().split())) for _ in range(n)]
cnt = 0

# 봉우리 세팅
for i in range(n):
    a[i].insert(0,0)
    a[i].append(0)

m = len(a[0])
a.insert(0, [0]*m)
a.append([0]*m)

# 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역
# 상 a[i-1][j] , 하 a[i+1][j]
# 좌 a[i][j-1] , 우 a[i][j+1]
for i in range(1, n+1):
    for j in range(1, n+1):
        if a[i][j] > a[i][j-1] and a[i][j] > a[i][j+1] and a[i][j] > a[i-1][j] and a[i][j] > a[i+1][j]:
            cnt += 1
print(cnt)

상하좌우 i,j 값을 비교하여 분기 처리로 답을 구하였다.
아래는 강사님 코드이다.
dx, dy 좌표를 따로 선언해두고 all 로 비교
if 문이 훨씬 간결하고 코드가 보기좋다.
아래 코드를 외우자

import sys
#sys.stdin = open("input.txt", 'r')
dx=[-1, 0, 1, 0]
dy=[0, 1, 0, -1]
n=int(input())
a=[list(map(int, input().split())) for _ in range(n)]
a.insert(0, [0]*n) // 맨앞에
a.append([0]*n) // 맨뒤에
// 각행의 맨앞 맨뒤에
for x in a:
    x.insert(0, 0)
    x.append(0)

cnt=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)