12845번 모두의 마블
문제 해결방법
- 카드중 가장 큰 값을 갖는 카드를 찾는다
- 해당 카드를 기준으로 좌/우로 나누어서 생각한다.
그렇다면 최대는 어떻게 나올 수 있을까?
최대를 가지기 위해서는 가장 큰값을 계속 더해주면 된다. 즉 큰값을 기준으로 좌로 인접한 값을 계속 더하고 우로 인접한 값을 계속 더하면 된다.
조금 풀어적자면, 가장 큰 값의 인덱스가 i라고 하자.
좌측을 기준으로 처음에는 i와 i-1이 더해지고, i와 i-2이 더해지고 i와 i-3.. 언제까지? 0일때까지
우측도 좌측의 아이디어처럼 풀어주면 된다.
전체 코드
def leftSchedule(card, maxIdx):
point = maxIdx - 1
ans = 0
while point > -1:
ans += (card[maxIdx] + card[point])
point -= 1
return ans
def rightSchedule(card, maxIdx):
point = maxIdx + 1
ans = 0
while point < len(card):
ans += (card[maxIdx] + card[point])
point += 1
return ans
def solution():
n = int(input())
card = list(int(x) for x in input().split())
#가장 큰 값을 기준으로 좌 우
maxIdx = card.index(max(card))
answer = 0
answer += leftSchedule(card, maxIdx)
answer += rightSchedule(card, maxIdx)
print(answer)
return answer
solution()