*문제 본문은 강의 내용과 관련되어 있어 자세하게 적지 않았습니다.
문제
지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요. 격자의 가장자리는 0으로 초기화 되었다고 가정한다.
풀이
• 내 풀이
import sys
input = sys.stdin.readline
N = int(input())
height = [list(map(int, input().split())) for _ in range(N)]
count = 0
for i in range(N):
for j in range(N):
current = height[i][j]
if i == 0:
up = 0
down = height[i+1][j]
elif i == N-1:
up = height[i-1][j]
down = 0
else:
up = height[i-1][j]
down = height[i+1][j]
if j == 0:
left = 0
right = height[i][j+1]
elif j == N-1:
left = height[i][j-1]
right = 0
else:
left = height[i][j-1]
right = height[i][j+1]
if up < current and down < current and left < current and right < current:
count += 1
print(count)
• 답안 : Python
import sys
input = sys.stdin.readline
N = int(input())
height = [list(map(int, input().split())) for _ in range(N)]
count = 0
# 상, 우, 하, 좌 (시계방향)
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
height.insert(0, [0]*N)
height.append([0]*N)
for i in height:
height.insert(0,0)
height.append(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)):
count += 1
print(count)
- 나는 직접 0으로 초기화해주지는 않고 주어진 인덱스 범위를 벗어날 경우 0이라고 가정하고 코드 구현을 했고, 마지막에 모든 조건을 and로 이어서 확인을 해주었다. 그러다보니 전체적으로 코드도 길어지고 구현한 코드가 좋지 않다고 느껴졌다.
- 답안에서는 직접 0으로 초기화해주는 과정을 진행했고, 상하좌우 비교하는 것을 리스트로 선언해서 for문으로 확인하는 방법으로 진행했다. 또한 마지막에 모든 조건을 확인할 때 all()을 사용해서 처리를 해주었다.
- 답안의 방법이 좀 더 효율적인 방식이라고 생각되어, 해당 방법을 익혀서 앞으로 자주 사용해야 겠다는 생각을 했다.
'💻 코딩테스트 > 파이썬 알고리즘 문제풀이' 카테고리의 다른 글
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 격자판 회문수 (0) | 2023.05.03 |
---|---|
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 스도쿠 검사 (0) | 2023.05.03 |
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 곶감(모래시계) (0) | 2023.04.29 |
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 사과나무(다이아몬드) (1) | 2023.04.28 |
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 격자판 최대합 (1) | 2023.04.28 |