카테고리 없음

[SW Expert Academy][D3][Python] [S/W 문제해결 기본] 1일차 - View

최문경 블로그 2019. 11. 4. 22:22

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(2len(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