https://www.acmicpc.net/problem/18185
18185번: 라면 사기 (Small)
라면매니아 교준이네 집 주변에는 N개의 라면 공장이 있다. 각 공장은 1번부터 N번까지 차례대로 번호가 부여되어 있다. 교준이는 i번 공장에서 정확하게 Ai개의 라면을 구매하고자 한다(1 ≤ i
www.acmicpc.net
문제 |
라면매니아 교준이네 집 주변에는 N개의 라면 공장이 있다. 각 공장은 1번부터 N번까지 차례대로 번호가 부여되어 있다. 교준이는 i번 공장에서 정확하게 Ai개의 라면을 구매하고자 한다(1 ≤ i ≤ N).
교준이는 아래의 세 가지 방법으로 라면을 구매할 수 있다.
- i번 공장에서 라면을 하나 구매한다(1 ≤ i ≤ N). 이 경우 비용은 3원이 든다.
- i번 공장과 (i+1)번 공장에서 각각 라면을 하나씩 구매한다(1 ≤ i ≤ N-1). 이 경우 비용은 5원이 든다.
- i번 공장과 (i+1)번 공장, (i+2)번 공장에서 각각 라면을 하나씩 구매한다(1 ≤ i ≤ N-2). 이 경우 비용은 7원이 든다.
최소의 비용으로 라면을 구매하고자 할 때, 교준이가 필요한 금액을 출력하는 프로그램을 작성하시오.
아이디어 |
예시와 함께 알아보도록 하겠습니다.
a2와 a3에 인수를 넣는 조건을 알았으니 다시 문제로 돌아가겠습니다.
소스코드 |
#include <iostream>
#define MAX 10001
using namespace std;
int origin_three[MAX], compare_five[MAX],compare_seven[MAX];
int minPrice, numOfFactory;
int getMinimum(int a, int b){
if(a <= b) return a;
else return b;
}
void getInput(){
scanf("%d",&numOfFactory);
for(int i=1; i<=numOfFactory; i++){
scanf("%d", &origin_three[i]);
}
}
void getMinprice(){
for(int i=1; i<=numOfFactory; i++) {
minPrice += (origin_three[i] * 3 + compare_five[i] * 5 + compare_seven[i] * 7);
}
}
void getMethod(){
for(int i=1; i<=numOfFactory; i++)
{
compare_five[i] = getMinimum(origin_three[i], origin_three[i-1]);
origin_three[i] = origin_three[i] - compare_five[i];
origin_three[i-1] = origin_three[i-1] - compare_five[i];
compare_seven[i] = getMinimum(origin_three[i], compare_five[i-1]);
origin_three[i] = origin_three[i] - compare_seven[i];
compare_five[i-1] = compare_five[i-1] - compare_seven[i];
}
}
void Print(){
printf("%d", minPrice);
}
int main()
{
getInput();
getMethod();
getMinprice();
Print();
return 0;
}
728x90
'프로그래밍 > Baekjoon & Codeup' 카테고리의 다른 글
[백준] 18186번 라면 사기(Large) 문제풀이 (2) | 2023.08.18 |
---|---|
[백준] 2504번 괄호의 값 문제풀이 (0) | 2023.08.17 |
[백준] 14252번 공약수열 문제풀이 (0) | 2023.08.09 |
[백준] 13412번 서로소 쌍(c) 문제풀이 (1) | 2023.05.09 |
[백준] 10773번 제로(c++) 문제풀이 (0) | 2023.05.03 |