그리디 문제. 3개를 동시에 살수있는 만큼 사고 2개를 사고 1개를 사는 방법.
주의할 점은 두번째 지점의 갯수가 세번째보다 큰경우. 이경우는 2개씩 사는 과정을 먼저 해주어야한다.
import sys
input = sys.stdin.readline
def buy_triple(idx):
global cost
k = min(arr[idx: idx + 3])
arr[idx] -= k
arr[idx + 1] -= k
arr[idx + 2] -= k
cost += (B + 2 * C) * k
def buy_double(idx):
global cost
k = min(arr[idx: idx + 2])
arr[idx] -= k
arr[idx + 1] -= k
cost += (B + C) * k
def buy_each(idx):
global cost
cost += B * arr[idx]
N, B, C = map(int, input().split())
if B < C: C = B
arr = list(map(int, input().split())) + [0, 0]
cost = 0
for i in range(N):
if arr[i + 1] > arr[i + 2]:
k = min(arr[i], arr[i + 1] - arr[i + 2])
arr[i] -= k
arr[i + 1] -= k
cost += (B + C) * k
buy_triple(i)
else:
buy_triple(i)
buy_double(i)
buy_each(i)
print(cost)
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 1455 뒤집기2 (0) | 2021.10.06 |
---|---|
[백준][Python] 18185 라면 사기(small) (2) | 2021.10.06 |
[백준][Python] 17135 캐슬디펜스 (0) | 2021.10.06 |
[백준][Python] 3273 두 수의 합 (0) | 2021.10.04 |
[백준][Python] 17521 Byte Coin (0) | 2021.10.04 |