1206. View
문제는 1차원 배열의 문제로,
1차원 배열로 주어진 빌딩의 높이를 계산하여
왼쪽과 오른쪽 각각에 2 이상의 조망권을 확보한 세대 수를 반환해야 한다.
SW Expert Academy에서 푼 문제 리스트 보기
문제 조건
좌우로 2칸 이상의 공백이 존재하는 세대 수를 합해 반환한다.
가로는 1000이하로 주어진다.
각 빌딩의 높이는 최대 255이다.
맨 왼쪽 두 칸과 맨 오른쪽 두 칸에는 건물이 지어지지 않는다.
문제 풀이
문제를 이해하면 풀기가 쉽다. 건물이 지어지지 않은 맨 왼쪽 두 칸과 맨 오른쪽 두 칸을 제외하고 빌딩이 지어진 부분인 Index 2부터 i -2의 원소까지 순회한다.
i번째 원소의 왼쪽 2개의 원소와 오른쪽 2개의 원소 각각의 최대 값을 찾는다. i번째 원소와 값을 비교하여 하나라도 i번째원소보다 높으면 i+1번째로 이동해 다음 빌딩을 검사한다.
만약에 왼쪽, 오른쪽의 최대값보다 i번째의 원소의 값이 클 경우에는 i번째 원소의 값에서 왼쪽, 오른쪽 값 중 더 큰 값을 빼주도록 한다.
그렇게 해서 나온 값은 조망권이 확보된 세대이며, 모든 빌딩을 위와 같이 조사하였을 때 조망권이 확보된 모든 세대수를 구할 수 있다.
파이썬 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | def solve(arr): count = 0 for i in range(2, len(arr) - 2): height = arr[i] left = max(arr[i-2:i]) # 왼쪽 조망권 확인 if height < left: continue right = max(arr[i+1:i+3]) # 오른쪽 조망권 확인 if height < right: continue around_height = max(left, right) count += (height - around_height) return count if __name__ == "__main__": for i in range(10): c = int(input().strip()) array = list(map(int, input().strip().split())) print("#{0} {1}".format(i+1, solve(array))) | cs |
#SW Expert Academy #1206. View #1206 view #1206 View python #python 1206 #1206. View #파이썬 1206. View
'온라인 코딩 테스트 문제 풀이 > 삼성 SW Expert 문제 풀이' 카테고리의 다른 글
Python으로 푸는 SW Expert Academy 1210. Ladder1 (0) | 2019.03.04 |
---|---|
Python으로 푸는 SW Expert Academy 2805. 농작물 수확하기 (0) | 2019.03.03 |
Python으로 푸는 SW Expert Academy 1954. 달팽이 숫자 (0) | 2019.03.01 |
Python으로 푸는 SW Expert Academy 1974. 스도쿠 검증 (0) | 2019.02.28 |