https://www.acmicpc.net/problem/18185
18185번: 라면 사기 (Small)
라면매니아 교준이네 집 주변에는 N개의 라면 공장이 있다. 각 공장은 1번부터 N번까지 차례대로 번호가 부여되어 있다. 교준이는 i번 공장에서 정확하게 Ai개의 라면을 구매하고자 한다(1 ≤ i
www.acmicpc.net
주의할 점
단순 그리드 문제지만 안되는 경우가 한가지 있다.
반례
더보기
4
2 3 2 1
정답 : 19
인덱스를 1 2 3 4라고 하면
1 2 3을 비교할때 만약 2번이 3번보다 큰 경우 3개(1-2-3)를 연달아서 구매하는 것이 최소가 아닐 수 있다.
코드
더보기
#include<iostream>
#include<vector>
using namespace std;
int N;
vector<int> nums;
void input(){
cin>>N;
nums.resize(N+5);
fill(&nums[0],&nums[N+5],0);
for(int i=0;i<N;i++){
cin>>nums[i];
}
}
int two_or_three(int idx){
int num=0;
num=min(nums[idx],nums[idx+1]-nums[idx+2]);
if(num <= 0)
return 0;
nums[idx]-=num;
nums[idx+1]-=num;
return num*5;
}
int three(int idx){
int num=0;
num=min(nums[idx],nums[idx+1]);
num=min(num,nums[idx+2]);
nums[idx]-=num;
nums[idx+1]-=num;
nums[idx+2]-=num;
return num*7;
}
int two(int idx){
int num=0;
num=min(nums[idx],nums[idx+1]);
nums[idx]-=num;
nums[idx+1]-=num;
return num*5;
}
void solution(){
int ret=0;
for(int i=0;i<N;i++){
int num=0;
ret+=two_or_three(i);
ret+=three(i);
ret+=two(i);
ret+=nums[i]*3;
}
cout<<ret<<'\n';
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
input();
solution();
return 0;
}

728x90
'알고리즘 > 백준 문제' 카테고리의 다른 글
| [ALGORITHM] 백준 17420 - 깊콘이 넘쳐흘러 (0) | 2022.10.25 |
|---|---|
| [ALGORITHM] 백준 2011 - 암호코드 (0) | 2022.10.17 |
| [ALGORITHM] 백준 1965 - 상자넣기 (1) | 2022.10.13 |
| [ALGORITHM] 백준 4195 - 친구 네트워크 (1) | 2022.10.08 |
| [ALGORITHM] 백준 1717 - 집합의 표현 (Weighted Union Find) (0) | 2022.10.07 |
댓글