Stay Hungry Stay Foolish

SWEA

[SWEA] 1206. [S/W 문제해결 기본] 1일차 - View (Python/D3)

dev스카이 2023. 11. 16. 21:04
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


설명

왼쪽과 오른쪽으로 창문을 열였을 때, 양쪽 모두 거리 2 이상의 공간이 확보될 때 조망권이 확보된다.
조망권이 확보된 세대의 수를 반환해야 한다.

 

풀이

첫 번째부터 이전 2번째까지와 이후 2번째까지 비교를 한다. 

리스트 4개 중(현재 아파트 주변 아파트)에서 max값을 찾고 현재 아파트와의 차이를 저장한다.

 

1. 현재 위치(i-2)에서 바로 양쪽에 있는 아파트(i-3, i-1)와 높이를 비교한다. 

 

2. 양쪽 아파트가 현재 위치보다 높으면 넘어가고, 그렇지 않으면 거리 차이가 2인 아파트(i-4, i)와 높이를 비교한다.

 

3. 위와 마찬가지로 현재 위치보다 높으면 넘어가고, 그렇지 않으면 비교한 아파트들 중에 높이가 가장 높은 걸 찾는다.

4. 현재 위치에서 3번에서 구한 아파트 길이의 최댓값을 빼고 결과값에 더하면서 저장한다.

5. n만큼 반복하고 다 탐색했으면 결과를 출력한다.

 

Solution

for tc in range(1, 11):
    n = int(input())
    apart = list(map(int, input().split()))
    ans = 0
    for i in range(4, n):
        if apart[i-3] >= apart[i-2] or apart[i-1] >= apart[i-2]: #일단 바로 앞의 아파트부터 판별
            continue
        else:
            if apart[i-4] >= apart[i-2] or apart[i] >= apart[i-2]:
                continue
            else:
                max_apart = max(apart[i-4], apart[i-3], apart[i-1], apart[i])
                ans += (apart[i-2] - max_apart)
    print('#'+str(tc), ans)

 

다른 풀이(반복문)

for i in range(2, n-2):
        max_apart = max(apart[i-1], apart[i-2], apart[i+1], apart[i+2])
        if apart[i] > max_apart:
            ans += (apart[i] - max_apart)

👩‍💻 회고

어려울 줄 알았는데 생각대로 구현했더니 1차 제출에 성공했다.

다른 풀이를 보면 조건문을 쓰지 않고 max만으로 구현을 해서 코드 길이를 줄일 수 있는 방법도 있다.