자료구조와 알고리즘/개인적인 코딩테스트 관련 풀이

[탐색][시뮬레이션] - 봉우리(2차원 List)

얄루몬 2022. 7. 7. 18:00

문제

  • 주어진 2차원 리스트에서 현재 값의 상하좌우를 비교해 현재 값이 가장 큰 경우 봉오리라고 한다.
  • 해당 2차원 리스트에 봉오리의 총갯수를 구하라
  • 이때 2차원 리스트의 가장자리는 0이라고 한다.

문제 풀이

#봉우리
import sys
#sys.stdin = open("input.txt", "r")

n = int(input())
a = [list(map(int,input().split())) for _ in range(n)]
a.insert(0, [0]*n)
a.append([0]*n)
for i in a:
    i.insert(0, 0)
    i.append(0)
cnt = 0
dx = [-1,1,0,0]
dy = [0,0,-1,1]

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)
  • insert( )와 append( )를 사용해서 가장자리를 0으로 만들어 준다. (위 아래는 해당 갯수만큼 그냥 추가 해주면 됨)
  • 2차원 리스트이기 때문에 a로 돌면 행을 기준으로 돌게 된다. 그래서 for 문으로 insert( ), append( )를 하게 되면 앞 뒤로 추가하게 되는 것이다 
  • dx, dy라는 변수를 준비해 상하좌우를 맞춰 준비해준다.
  • all( ) 함수를 사용해 해당 봉우리가 상하좌우보다 큰 경우 cnt를 증가시켜준다.