[백준/BOJ] 백준 1049번 : 기타줄
2020. 6. 12. 15:41ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/1049
패키지 가격과 낱개 가격을 입력받아 각각 오름차순으로 정렬해 패키지에서 가격이 가장 작은 것과, 낱개에서 가격이 가장 작은 것 만을 이용한다.
앞으로 사야될 기타 줄을 패키지로 사는 것이 좋을지 낱개로 사는 것이 좋을지 현재의 개수 상황에 맞게 파악해 값을 지불하는 것을 반복해서 사야 될 기타 줄을 줄여가며, 앞으로 사야 될 기타 줄이 0 이하로 된다면 더 이상 기타 줄을 살 필요가 없으므로 반복을 종료하고 지금까지 지불한 값을 출력한다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n, m;
vector<int> pack;
vector<int> item;
int temp1, temp2;
int minvalue = 0;
cin >> n >> m;
for (int i = 0; i < m; i++)
{
cin >> temp1 >> temp2;
pack.push_back(temp1);
item.push_back(temp2);
}
sort(pack.begin(), pack.end()); //패키지 가격을 오름차순으로 정렬
sort(item.begin(), item.end()); //낱개 가격을 오름차순으로 정렬
while (n > 0)
{
//살것이 6개 이하로 남았을때
if (n <= 6)
{
if (pack[0] > item[0] * n)
{
minvalue += item[0] * n;
n -= n;
}
else
{
minvalue += pack[0];
n -= 6;
}
}
//살것이 6개 초과로 남았을때
else
{
if (pack[0] > item[0] * 6)
{
minvalue += item[0] * 6;
n -= 6;
}
else
{
minvalue += pack[0];
n -= 6;
}
}
}
cout << minvalue;
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 10610번 : 30 (0) | 2020.06.14 |
---|---|
[백준/BOJ] 백준 1000번 : A+B (0) | 2020.06.13 |
[백준/BOJ] 백준 1120번 : 문자열 (0) | 2020.06.11 |
[백준/BOJ] 백준 2875번 : 대회 or 인턴 (0) | 2020.06.10 |
[백준/BOJ] 백준 2217번 : 로프 (0) | 2020.06.09 |