본문 바로가기

코딩테스트/SWEA

[Python, 파이썬] SWEA 1206. [S/W 문제해결 기본] 1일차 - View

 

건물의 개수 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 함수로 가장 큰 건물을 구하고 그보다 큰 세대의 수를 더한다.

이때, 조망권이 확보된 건물일 경우 다다음건물까지는 무조건 조망권이 확보되지 않으므로 건너뛴다.