[COS PRO 2급-Python] 위험한 지역 몇개인지 알려주기

Sunhee·2023년 6월 30일

COS PRO - Python 2급

목록 보기
39/44

[COS PRO 2급-Python] 위험한 지역 몇개인지 알려주기

문제 설명

4 x 4 크기 격자 모양 지형에 위험 지역이 몇 개인지 알고 싶습니다. 위험지역이란 동, 서, 남, 북 인접한 지역이 모두 해당 지역보다 높은 지역입니다. 예를 들어 지역 높이기 아래와 같다면

빨간 영역은 인접한 지역이 모두 해당 지역보다 높은 위험지역입니다.
지역별 높이기 담긴 2차원 배열 height, height의 길이 height_len이 solution 함수의 매개변수로 주어질 때, 위험 지역이 몇 개 인지 return 하도록 solution 함수를 완성해주세요.


### 매개변수 설명 지역별 높이가 담긴 2차원 배열 height, height의 길이 height_len이 solution 함수의 매개변수로 주어집니다.
  • 각 지역의 높이는 1 이상 50 이하인 자연수입니다.
  • height_len은 항상 4입니다.



return 값 설명

위험지역이 몇 개인지 return 해주세요.

예시


알고리즘 구상

▶ 변수 count를 초기화합니다.

▶ 이중 반복문을 사용하여 height의 각 요소를 순회합니다. 바깥쪽 반복문은 i를 행 인덱스로, 안쪽 반복문은 j를 열 인덱스로 사용합니다.

▶ 현재 요소의 값을 변수 here에 할당합니다.

▶ 상하좌우 인접한 위치의 요소와 비교하여, 현재 요소가 상하좌우에서 가장 낮은 값인지 확인합니다.

▶ 상하좌우 인접한 위치의 인덱스가 height 범위를 벗어나는 경우에 대한 예외 처리를 합니다. 예외 처리를 통해 인덱스가 범위를 벗어나는 경우에는 here + 1을 할당하여 현재 요소보다 큰 값을 가지도록 합니다.

▶ 상하좌우에서 받은 값들을 각각 top, right, bottom, left 변수에 할당합니다.

▶ 현재 요소 here가 상하좌우에서의 인접한 값들보다 작다면, 조건을 만족하므로 count를 1 증가시킵니다.

▶ 반복문이 종료되면 최종적으로 count 값을 반환합니다.


내가 쓴 코드!

def solution(height):
	count = 0
	
	for i in range(len(height)):
		for j in range(len(height[i])):
			here = height[i][j] 
			if i - 1 < 0:
				top = here + 1
			else:
				top = height[i-1][j]
			
			if j + 1 > len(height[i]) -1:
				right = here + 1
			else:
				right = height[i][j+1]
				
			if i + 1 > len(height) -1:
				bottom = here + 1
			else:
				bottom = height[i+1][j]
				
			if j - 1 < 0:
				left = here + 1
			else:
				left = height[i][j-1]
			
			if here < top and here < right and here < bottom and here < left:
				count += 1
	return count

0개의 댓글