코딩테스트/SWEA
[Python, 파이썬] SWEA 1206. [S/W 문제해결 기본] 1일차 - View
알코딩
2024. 10. 15. 15:13
건물의 개수 N과 N개의 건물의 높이가 주어질 때, 조망권이 확보된 세대의 수를 구하는 문제!
for test_case in range(10):
N = int(input()) # 건물의 개수 N
build = list(map(int, input().split())) # N개의 건물의 높이
i = 2 # 현재 건물
num = 0 # 조명권이 확보된 세대의 수
while i < N-2:
find = max(build[i-1], build[i-2], build[i+1], build[i+2]) # 주위에 있는 가장 큰 건물 찾기
if(build[i] > find): # 조명권 ok일시
num += (build[i] - find) # 조명권이 있는 세대를 더한다.
i += 3 # 조명권 범위 만큼은 더 이상 체크할 필요 x
else:
i += 1 # 다음 건물로 이동
print("#%d %d" %(test_case+1, num))
[문제풀이]
조망권이란 왼쪽과 오른쪽으로 창문을 열었을 때, 양쪽 모두 거리 2 이상의 공간이 확보될 때 조망권이 확보된 것이라 말한다.
즉, 양옆의 건물 4개의 높이의 최댓값보다 높은 건물이여야 조망권이 확보된것!
find = max(build[i-1], build[i-2], build[i+1], build[i+2]) # 주위에 있는 가장 큰 건물 찾기
그래서 max 함수로 가장 큰 건물을 구하고 그보다 큰 세대의 수를 더한다.
이때, 조망권이 확보된 건물일 경우 다다음건물까지는 무조건 조망권이 확보되지 않으므로 건너뛴다.