[백준/ 파이썬] 12845번 모두의 마블

김민구·2022년 7월 8일
0

백준 풀이

목록 보기
17/18

12845번 모두의 마블

문제 해결방법

  1. 카드중 가장 큰 값을 갖는 카드를 찾는다
  2. 해당 카드를 기준으로 좌/우로 나누어서 생각한다.

그렇다면 최대는 어떻게 나올 수 있을까?
최대를 가지기 위해서는 가장 큰값을 계속 더해주면 된다. 즉 큰값을 기준으로 좌로 인접한 값을 계속 더하고 우로 인접한 값을 계속 더하면 된다.

조금 풀어적자면, 가장 큰 값의 인덱스가 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()


profile
성장하는 개발자가 되고싶어요😀

0개의 댓글