Search

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

태그
구현

문제 설명

주어진 빌딩들에 대해 조망권이 확보된 세대의 수를 구하는 문제
각 세대는 왼쪽과 오른쪽으로 창문을 열었을 때, 양쪽 모두 2칸 이상의 공백이 있어야 조망권이 확보된 것으로 간주
맨 왼쪽과 오른쪽 두 칸은 항상 높이가 0으로 설정

예제 입력/출력

입력1
10 0 0 254 185 76 227 84 175 0 0 10 0 0 251 199 176 27 184 75 0 0 11 0 0 118 90 243 178 99 100 200 0 0 ...
Plain Text
복사
출력1
#1 111 #2 60 #3 165 ...
Plain Text
복사

제약 조건

4N1,0004 ≤ N ≤ 1,000
0H2550 ≤ H ≤ 255
맨 왼쪽 2칸과 맨 오른쪽 2칸은 높이가 0

문제 풀이

브루트 포스 - O(N)O(N)
문제에서 시키는 대로 구현하면 되는 단순 구현 문제에 해당
각 세대에 대해, 양옆으로 2칸씩 살펴보고, 그 구간에서 가장 높은 빌딩의 높이를 구한다.
만약 현재 빌딩의 높이가 양옆 가장 높은 빌딩보다 높다면, 그 세대는 조망권이 확보된 세대로 간주하고 그 차이를 누적하여 결과를 구한다.

풀이 코드

for tc in range(1, 11): N = int(input()) buildings = list(map(int, input().split())) ans = 0 for i in range(2, N-1): cnt = buildings[i] - max(buildings[i-2:i] + buildings[i+1:i+3]) ans += cnt if cnt > 0 else 0 print(f"#{tc} {ans}")
Python
복사