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만으로 구현을 해서 코드 길이를 줄일 수 있는 방법도 있다.
'SWEA' 카테고리의 다른 글
[SWEA] 2007. 패턴 마디의 길이 (Python/D2) (0) | 2023.11.19 |
---|---|
[SWEA] 1208. [S/W 문제해결 기본] 1일차 - Flatten (Python/D3) (0) | 2023.11.19 |
[SWEA] 5431. 민석이의 과제 체크하기 (Python/D3) (2) | 2023.11.16 |
[SWEA] 1217. [S/W 문제해결 기본] 4일차 - 거듭 제곱 (Python/D3) (0) | 2023.11.16 |
[SWEA] 5948. 새샘이의 7-3-5 게임 (Python/D3) (0) | 2023.11.16 |