백준 - 라면사기(18185) 본문
다양한 케이스로 패턴을 검출하고 풀었다.
case_1
1 2 1 1 -> 0
0 1 0 1 -> 7
0 0 0 1 -> 10
0 0 0 0 -> 13
case_2
0 1 1 1 -> 5
0 0 0 0 -> 12
세 개씩 확인을 하여 가운데가 오른쪽보다 클 때
같아질 때까지 왼쪽과 가운데를 뺀다.
def three(i):
min_data = min(data[i:i+3])
data[i] -= min_data
data[i+1] -= min_data
data[i+2] -= min_data
return min_data*7
def two(i):
min_data = min(data[i:i+2])
data[i] -= min_data
data[i+1] -= min_data
return min_data*5
def one(i):
min_data = data[i]
data[i] = 0
return min_data*3
n = int(input())
data = list(map(int, input().split()))+[0,0]
cost = 0
for i in range(len(data)-2):
if data[i+1] > data[i+2]:
minus = min(data[i],data[i+1]-data[i+2])
data[i] -= minus
data[i+1] -= minus
cost += minus*5
cost += three(i)
cost += one(i)
else:
cost += three(i)
cost += two(i)
cost += one(i)
print(cost)
'알고리즘' 카테고리의 다른 글
백준 - 가장 긴 증가하는 부분 수열5(14003) (0) | 2023.12.12 |
---|---|
백준 - 선분 그룹(2162) (0) | 2023.12.12 |
백준 - 롤러코스터(2873) (1) | 2023.12.12 |
백준 - 여러분의 다리가 되어 드리겠습니다!(17352) (1) | 2023.12.10 |
백준 - 평범한 배낭(12865) (1) | 2023.11.30 |
Comments