https://www.acmicpc.net/problem/1049
사고과정)
우선 줄의 갯수, 즉 N이 6이하라면 케이스가 두 가지이다.
1. 그냥 6개짜리 세트 하나 구매
2. 한 개짜리 N개 만큼 구매
N이 6 초과라면
1. 6개짜리 세트로 떼우기
2. 한개짜리 N개 만큼 떼우기
3. 6개짜리로 살 수 있는 만큼 사고 한 개짜리 나머지 사기
아마 정답률이 낮은건
1. 무조건 같은 브랜드로 사야한다는 착각
2. 6개짜리 세트로만 충족할 수 있다는 걸 놓친 경우
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N, M; // N은 기타줄 갯수, M은 기타줄 브랜드
cin >> N >> M;
vector<int> set_six(M, 0);
vector<int> just_one(M, 0);
for (int i = 0; i < M; i++)
cin >> set_six[i] >> just_one[i];
int result = 0;
int min_six = *min_element(set_six.begin(), set_six.end());
int min_one = *min_element(just_one.begin(), just_one.end());
if (N <= 6)
{
int case1 = min_six;
int case2 = min_one * N;
result = case1 > case2 ? case2 : case1;
}
else
{
if (N % 6 == 0)
{
int case1 = min_six * (N / 6);
int case2 = min_one * N;
result = case1 > case2 ? case2 : case1;
}
else
{
int case1 = min_six * ((N / 6) + 1);
int case2 = min_one * N;
int case3 = min_six * (N / 6) + min_one * (N % 6);
result = min({ case1, case2, case3 });
}
}
cout << result;
return 0;
}
'백준 문제풀이 > 실버4' 카테고리의 다른 글
백준 10828번 - 스택 (0) | 2022.01.13 |
---|---|
백준 2164번 - 카드2 (0) | 2022.01.12 |
백준 1978번 - 소수 찾기 (0) | 2021.11.11 |
백준 1120번 - 문자열 (0) | 2021.11.09 |
백준 1065번 - 한수 (0) | 2021.11.07 |