반응형
문제
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))
반응형
'Problem Solving > SWEA' 카테고리의 다른 글
[SWEA|파이썬] 2805. 농작물 수확하기 (D3) (0) | 2023.05.08 |
---|---|
[SWEA|파이썬] 2806. N-Queen (D3) (1) | 2023.05.07 |
[SWEA|파이썬] 1208. [S/W 문제해결 기본] 1일차 - Flatten (D3) (0) | 2023.05.07 |
[SWEA|파이썬] 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 (D3) (0) | 2023.05.07 |
[SWEA|파이썬] 5215. 햄버거 다이어트 (D3) (0) | 2023.04.27 |
[SWEA|파이썬] 16800. 구구단 걷기 (D3) (0) | 2023.04.26 |