문제
D3 - 1206. [S/W 문제해결 기본] 1일차 - View
코드 구현
정답 코드
'''
2개씩 묶어서 비교
i는 2부터 시작 (인덱스)
i-2 i-1 <i> i+1 i+2
i를 기준으로 양옆 2개씩 비교
(i가 i-1보다 크고 and i-2보다 크고) and (i가 i+1보다 크고 and i+2보다 크면)
-> 조망권 확보 !
-> 몇개? => i - (i-2, i-1, i+1, i+2 중에서 제일 큰 수) 만큼 확보
'''
def max_height(before2, before1, after2, after1):
arr = [before2, before1, after2, after1]
max_val = before2
for arr_val in arr:
if(arr_val > max_val):
max_val = arr_val
return max_val
for t in range(0, 1):
N = int(input())
buildings = list(map(int, input().split()))
jomang_count = 0
for i in range(2, N-2, 1):
if (buildings[i] > buildings[i-2] and buildings[i] > buildings[i-1]) and (buildings[i] > buildings[i+2] and buildings[i] > buildings[i+1]):
sub_max_building = max_height(buildings[i-2], buildings[i-1], buildings[i+2], buildings[i+1])
jomang_count += buildings[i] - sub_max_building
print("#%ld %ld" % (t + 1, jomang_count))
풀이
i
를 기준으로 양 옆 2개씩의 높이를 비교하여 계산한다.
i
의 왼쪽인 i-1
, i-2
가 모두 i
보다 작고 && i
의 오른쪽인 i+1
, i+2
가 모두 i
보다 크면 -> 조망권이 확보된다.
- 조망권의 수는
i
- i 양쪽 모든 4개의 건물 중 제일 높은 건물 높이
만큼 확보된다.