알고리즘/9oormthon Challenge
[구름톤 챌린지 #4] 완벽한 햄버거 만들기
young_and_mini
2023. 8. 18. 00:56
구름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)