코테 공부/그 외 사이트

[Python] 1206. [S/W 문제해결 기본] 1일차 - View

prefer_all 2022. 11. 25. 09:04

문제


예제

입력 출력
100
0 0 225 214 82 73 241 233 179 219 135 62 36 13 6 71 179 77 67 139 31 90 9 37 93 203 150 69 19 137 28 174 32 80 64 54 18 0 158 73 173 20 0 102 107 48 50 161 246 145 225 31 0 153 185 157 44 126 153 233 0 201 83 103 191 0 45 0 131 87 97 105 97 209 157 22 0 29 132 74 2 232 44 203 0 51 0 244 212 212 89 53 50 244 207 144 72 143 0 0 

... (생략)
#1 691
#2 9092
#3 8998
#4 9597
#5 8757
#6 10008
#7 10194
#8 10188
#9 9940
#10 8684

풀이

N개의 건물 중 i번째 건물의 양쪽 건물 두 개씩 높이를 확인하면서 조망권이 확보되었는 지 확인한다.

즉, i-2, i-1, i+1, i+2 번째 건물의 최대 높이가 i번째 건물보다 낮으면

i번째 건물의 몇 개 층은 조망이 확보된 것이므로

해당 건물의 조망권이 확보된 층의 개수는 arr[i] - max(arr[i-2], arr[i-1], arr[i+1], arr[i+2]) 이다.

'''
좌우로 2칸 이상 공백이 존재해야 조망권이 확보됨
'''
#import sys
#sys.stdin = open("./input.txt", "r")
for num in range(10):
    ans = 0
    N = int(input())
    arr = list(map(int, input().split()))
    for i in range(2, len(arr)-2):
        tmp = max(arr[i-2], arr[i-1], arr[i+1], arr[i+2])
        if arr[i]- tmp > 0:
            ans +=  arr[i]- tmp
    print("#{} {}".format(num+1, ans))