https://swexpertacademy.com/main/code/problem/problemDetail.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
동아리에서 푼 문제!
이 문제는 풀긴 풀었는 데 답은 잘 나오는 것 같은 데 계속 런타임 에러가 나서 구글링으로 풀었다..
보고 나니까 내가 푼 풀이가 얼마나 복잡한 풀이였는지 느껴졌다..
아래의 풀이가 구글링으로 찾은 풀이!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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
# 왼쪽과 오른쪽에서 최대값 찾기
max_height_lr = max(left, right)
# 최대값과의 차이만큼 더하기
count += (height - max_height_lr)
return count
for i in range(10):
n = int(input())
array = list(map(int, input().split()))
print("#{} {}".format(i+1, solve(array)))
|
cs |
일단, 왼쪽과 오른쪽 끝의 2칸에는 아파트가 없으므로 반복문이 시작과 끝은 2와 len(arr)-2로 한다.
arr은 아파트들의 층 수들을 입력받아 놓은 리스트이다.
그리고 왼쪽과 오른쪽 두 칸에서 최대값을 찾고 해당 인덱스의 아파트 층 수와 비교해서 왼쪽 또는 오른쪽에 더 큰 아파트가 있다면 다음 아파트로 넘어간다. (양 쪽 2칸안에 더 큰 아파트가 있으면 조망권 확보 안되니까!)
만약 없다면, 아까 찾은 왼쪽과 오른쪽 두 칸에서의 최대값 중에 더 큰 값을 찾은 뒤, 현재 인덱스의 아파트 층 수에서 빼주면 조망권이 확보된 세대 수가 나올 것이다!
참고한 블로그!
https://daimhada.tistory.com/75
Python으로 푸는 SW Expert Academy 1206. View
1206. View 문제는 1차원 배열의 문제로, 1차원 배열로 주어진 빌딩의 높이를 계산하여 왼쪽과 오른쪽 각각에 2 이상의 조망권을 확보한 세대 수를 반환해야 한다. SW Expert Academy에서 푼 문제 리스트 보기 git..
daimhada.tistory.com