1일차 (월) : 18186번, 라면 사기 (Small) ****(D5)

screencapture-acmicpc-net-problem-18185-2025-02-28-11_43_22.png

image.png

풀이 코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	int n, cnt, ans = 0;
	cin >> n;
	vector<int> v(n + 2, 0);
	for (int i = 0; i < n; i++) cin >> v[i];

	for (int i = 0; i < n; i++) {
		if (v[i + 1] > v[i + 2]) {
			cnt = min(v[i], v[i + 1] - v[i + 2]);
			ans += cnt * 5;
			v[i] -= cnt;
			v[i + 1] -= cnt;

			cnt = min(v[i], v[i + 2]);
		}
		else cnt = min(v[i], v[i + 1]);

		ans += cnt * 7;
		v[i] -= cnt;
		v[i + 1] -= cnt;
		v[i + 2] -= cnt;
		ans += v[i] * 3;
	}
	cout << ans;

	return 0;
}

최종수정 : 2025-02-19

2일차 (화) : 18186번, 라면 사기 (Large) ****(D4)

screencapture-acmicpc-net-problem-18186-2025-02-28-11_41_27.png

image.png

풀이 코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	long long n, b, c, cnt, ans = 0;
	cin >> n >> b >> c;
	vector<long long> v(n + 2, 0);
	for (int i = 0; i < n; i++) cin >> v[i];

	if (b < c) {
		for (int i = 0; i < n; i++) ans += b * v[i];
	}
	else {
		for (int i = 0; i < n; i++) {
			if (v[i + 1] > v[i + 2]) {
				cnt = min(v[i], v[i + 1] - v[i + 2]);
				ans += cnt * (b + c);
				v[i] -= cnt;
				v[i + 1] -= cnt;

				cnt = min(v[i], v[i + 2]);
			}
			else cnt = min(v[i], v[i + 1]);

			ans += cnt * (b + 2 * c);
			v[i] -= cnt;
			v[i + 1] -= cnt;
			v[i + 2] -= cnt;
			ans += v[i] * b;
		}
	}
	cout << ans;

	return 0;
}