일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 이진탐색
- 프로그래머스코딩테스트
- 논문구현
- 프로그래머스sql
- MySQL
- 해시를사용한집합과맵
- 정렬
- 정수론
- 브루트포스알고리즘
- 그리디알고리즘
- 문자열
- C언어
- 프로그래머스연습문제
- 백준
- 백준알고리즘
- 프로그래머스
- 큐
- 논문리뷰
- C++
- 그리디
- 이분탐색
- C
- 수학
- Image Classification
- 다이나믹프로그래밍
- 자료구조
- 소수판정
- 사칙연산
- SQL
- 구현
- Today
- Total
초보 개발자의 이야기, 릿허브
[C++] 백준 11508번 2+1 세일 본문
1. 문제이해


11508번: 2+1 세일
KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두
www.acmicpc.net
재현이가 유제품을 살 때, 3개를 한꺼번에 산다면 그 중 가장 싼 유제품은 무료로 받게된다.
재현이가 사는 유제품의 개수(N)와 각 유제품의 가격이 차례로 주어질때,
재현이가 유제품을 사는 최소비용을 출력하는 알고리즘을 구현하는 것이 목표이다.
2. 문제풀이
재현이가 유제품을 3개씩 산다면, 그 중 가장 싼 유제품은 무료이다.
그렇다면 당연히, 5개의 유제품을 살 때, 3, 2개로 나누어 사는게 이득이다.
또한, 3개로 묶인 유제품 중 가장 싼 제품이 무료이기 때문에,
가장 비싼 가격의 제품들을 묶어 그 중 싼 가격을 지불하지 않는 것이 이득이다.
예를 들어, 각각 9, 7, 5, 3 원인 유제품이 있을 때,
(9, 7, 5) (3) 으로 사서, 5원인 제품을 할인받아 사면, 총 16+3 = 19원이 든다.
반면, (3, 7, 5) (9) 로 사면, 3원인 제품을 할인받아, 총 12 + 9 = 21원이 든다.
이렇듯, 비싼 가격의 제품들을 차례로 묶어 그 중 그나마 싼 것을 지불하지 않는 것이 가장 이득이다.
즉, 이를 코드로 구현하면, 내림차순으로 정렬 후, 3번째 값들을 빼고 더해주면 된다.
3. 소스코드
#include <iostream>
#include <algorithm>
using namespace std;
int dairy_product[100000];
// 내림차순
bool DESC(int a, int b) {
return a > b;
}
int main() {
int N;
int sum = 0;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> dairy_product[i];
}
// 내림차순으로 정렬
sort(dairy_product, dairy_product + N, DESC);
for (int i = 0; i < N; i++) {
// 3개씩 묶은 것 중 가장 작은 값 (3번째 값, 배열이므로 i+1)
if ((i + 1) % 3 == 0) {
continue; // 계산하지 않음
}
else {
sum += dairy_product[i];
}
}
cout << sum;
return 0;
}
위처럼, 유제품의 개수와 각각의 가격을 입력받아 배열(dairy_product[i])에 저장한 후,
해당 배열을 내림차순으로 정렬해주었다.
내림차순으로 정렬한 이후에는, 2. 문제풀이에서 언급했듯,
3개씩 묶은 값 중 가장 작은 값(3번째 값)을 제외한 나머지값들을 차례로 더해주면 된다.
그리디문제 위주로 문제를 푸는 연습을 하는 중이다.
기분 탓인지는 몰라도 다른 문제들보다 그리디문제는 이해하기가 조금 힘든 것 같기도하다..😥
차츰 풀면 나아지겠지..? 🙄
'코딩테스트 > 📗 백준 (BOJ)' 카테고리의 다른 글
[C++] 백준 10845번 큐 (1) | 2021.08.28 |
---|---|
[C++] 백준 20300번 서강근육맨 (0) | 2021.08.27 |
[C++] 백준 2847번 게임을 만든 동준이 (0) | 2021.08.25 |
[C++] 백준 13305번 주유소 (0) | 2021.08.24 |
[C++] 백준 10773번 제로 (0) | 2021.08.20 |