다른 건물의 높이를 포함하는 배열이 제공된다고 가정합니다. 건물이 일렬로 늘어서 있고 다른 고층 건물에 가려져 있지 않으면 건물이 더 잘 보입니다. 따라서 높이를 포함하는 배열이 제공되면 다른 높은 건물이 없는 건물에서 시야를 가리는 건물을 찾아야 합니다. 기준을 만족하는 배열에서 인덱스가 반환됩니다.
따라서 입력이 height =[5, 6, 8, 7]과 같으면 출력은 [2, 3]이 됩니다. 배열 인덱스 0과 1의 건물은 인덱스 2의 건물에 의해 차단됩니다. 인덱스 2와 3의 건물은 위치 2의 높은 건물이 위치 3의 짧은 건물 뒤에 있기 때문에 차단되지 않습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- res :=새 목록
- 시간 :=0
- i의 경우(높이 크기 - 1) ~ -1, 1 감소, do
- 높이[i]> h이면
- res 끝에 i 삽입
- h :=높이[i]
- 높이[i]> h이면
- 목록 res의 역순으로 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(heights): res, h = [], 0 for i in range(len(heights) - 1, -1, -1): if heights[i] > h: res.append(i) h = heights[i] return res[::-1] print(solve([5, 6, 8, 7]))
입력
[5, 6, 8, 7]
출력
[2, 3]