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

problem

SW Expert Academy View

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

Solution

1. 5개의 값들을 비교하여 가운데 있는 값이 주변 값들보다 크면 조망권이 확보되었다고 할 수 있다.
2. 조망권이 확보된 개수를 세기 위해 최댓값과 그다음 최댓값의 차를 더해준다.
  - 가장 큰 값과 그 다음으로 큰 값의 차는 조망권이 확보된 층들을 의미한다.
3. 어차피 양 끝의 2칸은 무조건 0이니까 탐색은 2번째부터 N-2까지만 하면 된다.

 

Code

for test_case in range(1, 11):
    N = int(input())
    building_list = list(map(int, input().split()))
    count = 0
    # 5개의 중 가운데가 가장 큰 경우를 뽑아 가장 큰 값과 차순위의 차를 더해감
    for i in range(2, N-2):
        arr = building_list[i-2:i+3]
        if arr[2] == max(arr):
            count += arr[2] - max(arr[:2] + arr[3:])
         
    print(f'#{test_case} {count}')

<부족한 부분들을 댓글로 남겨주시면 저에게 도움이 됩니다!>

<그림 출처: SWEA View>

 

반응형