본문 바로가기
🤖 알고리즘/백준 문제풀이

[파이썬] 18185 라면사기 Small (백준)

by 아단아 2024. 2. 14.
728x90

1. 문제 설명

문제 : 18185 - 라면 사기 (Small) https://www.acmicpc.net/problem/18185

사용 언어 : 파이썬 (Pypy3)

 

문제요약 :

하나는 3원, 연속된 2개는 5원, 연속된 3개는 7원으로 라면을 구매 할 수 있을 때 라면을 구하는 최소 비용을 구하여라.


2. 문제 풀이

해설 :

케이스로 나누어서 풀 수 있다. 여기서는 대표적으로 2가지의 케이스로 나누어서 설명하겠다.

01234
코드와 함께 보면 보다 더 이해하기 쉬울 것이다.

i+1의 값이 i+2보다 클 때의 경우이다. 이 때에는 먼저 연속된 2개를 처리하고, 연속된 3개를 처리한다.

01234
이것도 코드와 함께 보길...

i+1의 값이 i+2보다 작을 때의 경우이다. 이 때에는 먼저 연속된 3개를 처리하고, 연속된 2개를 처리한다.

만약 위에 두 경우에서 i번째 값이 가장 커서 남게 된다면, 마지막으로 3원으로 남은 라면을 모두 산다.

 

코드 :

N = int(input())
A = list(map(int,input().split()))+[0, 0]

ans = 0
for i in range(N):
    if A[i+1] > A[i+2]:
        sub = min(A[i], A[i+1]-A[i+2])
        A[i] -= sub; A[i+1] -= sub; ans += sub*5

        sub = min(A[i], A[i+1], A[i+2])
        A[i] -= sub; A[i+1] -= sub; A[i+2] -= sub; ans += sub*7

    else:
        sub = min(A[i], A[i+1], A[i+2])
        A[i] -= sub; A[i+1] -= sub; A[i+2] -= sub; ans += sub*7

        sub = min(A[i], A[i+1])
        A[i] -= sub; A[i+1] -= sub; ans += sub*5

    ans += A[i]*3; A[i] = 0
 
print(ans)

3. 추가로...

첫 다이아!!! 첫 다이아로 꽤 괜찮은 문제였던 것 같다.


앞으로 코딩과 알고리즘 관련 글을 업로드할 예정입니다!

아직 배우는 중이라서 부족한 점이 있으면 댓글 남겨주시면 감사하겠습니다!!

728x90