본문 바로가기
Problem Solving/SWEA

[SWEA|파이썬] 1206. [S/W 문제해결 기본] 1일차 - View (D3)

by 청량리 물냉면 2023. 5. 6.
반응형
문제

https://tinyurl.com/2h63zh9c

 

SW Expert Academy

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

swexpertacademy.com

 

 

🐍파이썬
for test_case in range(1, 11):
    a = int(input())
    answer = 0
    n = list(map(int, input().split()))
    for i in range(2, len(n)-2):
        #내 전의 두 아파트 / 나 이후의 두 아파트 중 어느 하나라도 나보다 크면 조망권 침해
        if n[i-2] > n[i] or n[i-1] > n[i] or n[i+1] > n[i] or n[i+2] > n[i]:
            continue
        answer += n[i] - max(n[i-2], n[i-1], n[i+1], n[i+2])
    print("#{} {}".format(test_case, answer))

건물 i의 조망권이 보장되려면 양옆 건물 2개의 높이가 i보다 커서는 안 된다. 따라서 건물 i의 이전 건물 2채, 이후 건물 2채 중 하나라도 i의 높이보다 높으면 조망권은 보장되지 않는다. 👉 continue로 처리

위의 경우가 아니라면 건물 i의 몇 층까지 조망권을 보장받는지 확인한다. 건물 i의 이전 건물 2채, 이후 건물 2채 중 건물 i와 동일한 층에 존재하는 건물이 있다면 해당 층은 조망권을 보장받지 못한다. 따라서 4채의 건물 중 가장 높은 건물을 기준으로 건물 i의 몇층까지 조망권이 확보되는지 확인한다. 👉 n[i] - max(n[i-2], n[i-1], n[i+1], n[i+2])

 

 

다른 풀이 방법

T = 10
for test_case in range(1, T + 1):
    N = int(input())
    buildings = list(map(int, input().split()))
    shine = 0  # 조망권을 가진 세대
    temp = [0, 0, 0, 0, 0]  # 조망권 비교를 위해 다섯 건물 집합
    for i in range(2, N - 2):
        temp = [buildings[i - 2], buildings[i - 1], buildings[i], buildings[i + 1], buildings[i + 2]]
        temp.sort(reverse=True)	#건물층 내림차순 정렬
        if temp[0] == buildings[i]:	#가장 높은 건물이 현재 건물i라면
            shine += buildings[i] - temp[1]	#현재 건물층수 - 두번째로 높은 건물 층수
    print("#{} {}".format(test_case, shine))

 

반응형