# tc가 10개
for tc in range(1,11):

    # tc의 길이
    n = int(input())

    # 빌딩의 높이
    heights = list(map(int,input().split()))

    # 조망권 확보 수
    cnt = 0

    # 확인 위치
    idx = 2

    # 마지막 오른쪽 2개는 0 0 이므로 확인 안 해도 됨
    while idx < n-2:

        # 왼쪽에 있는 것들보다 작으면 idx 한 칸 이동, 한 칸 오른쪽 옆에 있는 빌딩보다 작으면 한 칸 이동
        if heights[idx] <= heights[idx-2] or heights[idx] <= heights[idx-1] or heights[idx] <= heights[idx+1]:
            idx += 1
            pass
        
        # 두 칸 오른쪽 옆에 있는 빌딩보다 작으면 두 칸 이동
        elif heights[idx] <= heights[idx+2]:
            idx += 2
            pass

        # 조망권이 확보 된 경우
        else:
            
            # 조망권 확보 숫자 더해주기
            cnt += heights[idx] - max(heights[idx-2], heights[idx-1], heights[idx+1], heights[idx+2])
            
            # 오른쪽으로 3칸 이동
            idx += 3

    print('#{} {}'.format(tc,cnt))

 

그 외

문제 풀이를 위한 아이디어

 

1. 조망권이 확보 된 경우에는 오른쪽 3번째 칸으로 점프해도 됨

(현재 위치가 오른쪽 2번째 칸까지의 조망권을 방해할 것이기 때문)

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다