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
'🤖 알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[파이썬] 3011 이름 지어주기 (백준) (0) | 2024.02.20 |
---|---|
[파이썬] 28218 격자 게임 (백준, KOI 1차) (0) | 2024.02.14 |
[파이썬] 1219 오민식의 고민 (백준) (0) | 2023.12.31 |
[파이썬] 1738 골목길 (백준) (0) | 2023.12.31 |
[파이썬] 1865 웜홀 (백준) (0) | 2023.12.28 |