Algorithm/Baekjoon

[백준 21758] 꿀 따기 (Python)

문제 링크 #

문제 해설 #

Idea #

  • 벌이 같은 방향을 향하는 경우 상자까지의 총합에서 두 벌의 시작 위치에 있는 값을 제외
  • 벌이 다른 방향을 향하는 경우 상자까지의 총합에 절댓값을 취해서 더함

Data Size #

  • N: 3 <= int <= 100,000
  • arr[i]: 1 <= int <= 10,000

해설 코드 #

python
N = int(input())
arr = list(map(int, input().split()))
forward, backward = [arr[0]]+[0]*(N-1), [0]*(N-1)+[arr[-1]]
for i in range(1,N):
    forward[i] = forward[i-1] + arr[i]
    backward[N-i-1] = backward[N-i] + arr[N-i-1]
answer = 0

for i in range(1,N-1):
    answer = max(answer, forward[N-1]*2-forward[0]-forward[i-1]-arr[i]*2)
    answer = max(answer, backward[0]*2-backward[N-1]-backward[N-i]-arr[N-i-1]*2)
    answer = max(answer, forward[i]-arr[0]+backward[i]-arr[-1])

print(answer)
PREV [백준 10026] 적록색약 (Python) NEXT [백준 5547] 일루미네이션 (Python)