구름LEVEL
난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.
level.goorm.io
문제해결방법
슬슬 문제에 까다로운 조건이 나오기 시작해서 생각이 더 많이 필요해지고 있다 문제 난이도도 ★★로 올랐다. 그래도 아직까지는 크게 어렵지 않다.
배열이 증가했다가 감소하는 형태인지를 체크하는 방법을 떠올릴 수 있으면 된다.
여러 방법이 있겠지만, 내가 생각한 방법은 최댓값을 찾고, 최댓값을 기준으로 양쪽으로 감소하는 형태인지를 체크하는 방법이다. 우선 arr.index(max(arr))을 이용해 최댓값의 위치를 찾고, 다음과 같은 두 가지의 단계로 나누어서 체크한다.
- 최댓값에서부터 배열의 첫 번째 요소까지 이동하면서 값이 더 커지는 구간이 있는지를 확인한다. 값이 커지는 구간이 있다면 바로 함수를 종료하고 False를 반환한다.
- 최댓값에서부터 배열의 마지막 요소까지 이동하면서 값이 더 커지는 구간이 있는지를 확인한다. 값이 커지는 구간이 있다면 바로 함수를 종료하고 False를 반환한다.
함수가 중간에 종료되어 False를 반환했다면 0을 출력하고, 그렇지 않다면 각 요소의 합을 출력하면 된다.
위 내용을 코드로 구현하면 아래와 같다.
n = int(input())
arr = list(map(int, input().split()))
max_index = arr.index(max(arr))
def get_taste(arr, max_index):
taste = arr[max_index]
for i in range(max_index, 0, -1):
if arr[i] < arr[i-1]:
return False
taste += arr[i-1]
for i in range(max_index, len(arr)-1):
if arr[i] < arr[i+1]:
return False
taste += arr[i+1]
print(taste)
return True
if not get_taste(arr, max_index):
print(0)
'알고리즘 > 9oormthon Challenge' 카테고리의 다른 글
[구름톤 챌린지 #6] 문자열 나누기 (0) | 2023.08.21 |
---|---|
[구름톤 챌린지 #5] 이진수 정렬 (0) | 2023.08.18 |
[구름톤 챌린지 #3] 합 계산기 (0) | 2023.08.17 |
[구름톤 챌린지 #2] 프로젝트 매니징 (0) | 2023.08.16 |
[구름톤 챌린지 #1] 운동 중독 플레이어 (0) | 2023.08.14 |