-
[BOJ] 11508 2+1 세일 - C++개발/알고리즘 & PS 2024. 4. 1. 13:16
https://www.acmicpc.net/problem/11508
아이디어
최소한의 값을 지불하려면 무료로 받는 제품의 가격을 최대한 크게 만들어야 한다. 다만, 무료로 받을 수 있는 제품은 3개 중 가장 싼 제품이기에 다른 두 제품이 비쌀수록 큰 할인을 받을 수 있다. 따라서, 내림차순으로 정렬한 후 3개씩 묶어 사면된다.
코드
#include <iostream> #include <algorithm> using namespace std; int main() { cin.tie(nullptr); cout.tie(nullptr); ios_base::sync_with_stdio(false); int n; cin >> n; int arr[n]; for (int i = 0; i < n; i++) { cin >> arr[i]; } sort(arr, arr + n, greater<>()); int ans = 0; for (int i = 0; i < n; i++) { if (i + 2 < n) { ans += arr[i] + arr[i + 1]; i += 2; } else { ans += arr[i]; } } cout << ans; }
'개발 > 알고리즘 & PS' 카테고리의 다른 글
[BOJ] 2143 두 배열의 합 - C++ (1) 2024.04.04 [BOJ] 15970 화살표 그리기 - C++ (0) 2024.04.03 [BOJ] 20153 영웅이는 2의 거듭 제곱을 좋아해! - C++ (0) 2024.03.29 [BOJ] 14606 피자 (Small) - C++ (0) 2024.03.29 [BOJ] 17532 여러분의 다리가 되어 드리겠습니다! - C++ (0) 2024.01.13