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

박제현·2023년 10월 23일

SSAFY

목록 보기
1/16

T = 10
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    N = int(input())

    buildings = list(map(int, input().split()))
    view = 0

    for i in range(N):
        left = False
        right = False

        if i == 0:
            left = True

        elif i == 1:
            if buildings[i - 1] < buildings[i]:
                left = True
        else:
            if buildings[i - 2] < buildings[i] and buildings[i - 1] < buildings[i]:
                left = True

        if i == N - 1:
            right = True
        elif i == N - 2:
            if buildings[i + 1] < buildings[i]:
                right = True
        else:
            if buildings[i + 2] < buildings[i] and buildings[i + 1] < buildings[i]:
                right = True

        if left and right:
            if i == 0:
                view += buildings[i] - max(buildings[i + 1 : i + 3])
            elif i == N - 1:
                view += buildings[i] - max(buildings[i - 2 : i + 1])
            else:
                view += buildings[i] - max(
                    max(buildings[i - 2 : i]), max(buildings[i + 1 : i + 3])
                )

    print(f"#{test_case} {view}")

풀이.

빌딩의 앞, 뒤 두 빌딩의 층만 생각하자.

대신, 맨 첫번째, 두번째 빌딩과 맨 끝 빌딩, 끝에서 두번째 빌딩의 예외처리만 완벽하게 해주기.

매우 쉬운 문제.

profile
닷넷 새싹

0개의 댓글