코딩하는 베어브릭
탐색&시뮬레이션 문제 #9. 봉우리 본문
*이 풀이는 인프런: 파이썬 알고리즘 문제풀이 강좌에 기반하였습니다.
내 풀이
1. if문으로 모든 경우를 나눠준다. 4개의 모서리는 모서리 주변의 2군데만 확인하면 되고, 첫번째 행, 마지막 행, 첫번째 열, 마지막 열은 그 주변의 3군데만 확인하면 된다. 그리고 이외의 경우는 상하좌우 4군데 전부 확인해야한다.
코드를 짤 때 주의해야할 것은 어떤 조건문을 위에 작성할 것인지 생각해야한다.
import sys
#sys.stdin=open("input.txt","rt")
n=int(input())
arr=[list(map(int, input().split())) for _ in range(n)]
cnt=0
for i in range(n):
for j in range(n):
if i==0:
if j==0:
if arr[i][j] > arr[i][j+1] and arr[i][j] > arr[i+1][j]:
cnt+=1
elif j==n-1:
if arr[i][j] > arr[i][j-1] and arr[i][j] > arr[i+1][j]:
cnt+=1
else:
if arr[i][j]>arr[i][j-1] and arr[i][j]>arr[i][j+1] and arr[i][j]>arr[i+1][j]:
cnt+=1
elif i==n-1:
if j==0:
if arr[i][j] > arr[i-1][j] and arr[i][j] > arr[i][j+1]:
cnt+=1
elif j==n-1:
if arr[i][j] > arr[i-1][j] and arr[i][j] > arr[i][j-1]:
cnt+=1
else:
if arr[i][j]>arr[i][j-1] and arr[i][j]>arr[i][j+1] and arr[i][j]>arr[i-1][j]:
cnt+=1
elif j==0:
if arr[i][j]>arr[i-1][j] and arr[i][j]>arr[i][j+1] and arr[i][j]>arr[i+1][j]:
cnt+=1
elif j==n-1:
if arr[i][j]>arr[i-1][j] and arr[i][j]>arr[i][j-1] and arr[i][j]>arr[i+1][j]:
cnt+=1
else:
if arr[i][j]>arr[i-1][j] and arr[i][j]>arr[i][j-1] and arr[i][j]>arr[i+1][j] and arr[i][j]>arr[i][j+1]:
cnt+=1
print(cnt)
강사님 풀이
import sys
sys.stdin=open("input.txt","rt")
n=int(input())
a=[list(map(int, input().split())) for _ in range(n)]
# 맨 위의 행 삽입
a.insert(0,[0]*n)
# 맨 아래 행 삽입
a.append([0]*n) # == a.insert(n+2,[0]*n)
#맨 왼쪽, 오른쪽 열 삽입
for x in a:
x.insert(0,0)
x.append(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(a[i][j]>a[i+dx[k]][j+dy[k]] for k in range(4)):
cnt+=1
print(cnt)
배운 점
1. 리스트 내장함수 insert( a, [ b ] ) : a번째 행에 [ b ] 배열 삽입
2. 리스트 내장함수 append( [ b ] ): 마지막 행에 [ b ] 배열 삽입
3. all( ) : 모든 요소가 참이어야지만 참 반환
a=[1,2,3,4,5]
if all(x>0 for x in a): # Yes 출력
print("Yes")
else:
print("No")
4. 상하좌우를 탐색해야하는 경우, 행의 변위를 나타내는 dx = [ -1, 0, 1, 0 ], 열의 변위를 나타내는 dy = [ 0, 1, 0, -1 ] 로 초기화한다.
그리고 반복문과 dx, dy를 이용해서 상하좌우를 간단한 코드로 나타낼 수 있다.
'알고리즘 > 인프런: 파이썬 알고리즘 문제풀이' 카테고리의 다른 글
| 탐색&시뮬레이션 문제 #11. 격자판 회문수 (0) | 2022.06.01 |
|---|---|
| 탐색&시뮬레이션 문제 #10. 스도쿠 검사 (0) | 2022.06.01 |
| 탐색&시뮬레이션 문제 #8. 곳감 (모래시계) (0) | 2022.05.31 |
| 탐색&시뮬레이션 문제 #7. 사과나무 (0) | 2022.05.28 |
| 탐색&시뮬레이션 문제 #6. 격자판 최대합 (0) | 2022.05.28 |
Comments