- ์ด์ assert๋ฌธ ์ฐ๋ ๋ฒ์ ์์ ๊ฐ๊ณ ์๋ค.
- ํ๋ฅญํ ํ๋ก๊ทธ๋๋จธ๋ค์ ์ต๊ด์ ๋ฐ๋ผ ํด๋ณด๋ ค ๋
ธ๋ ฅ์ค์ด๋ค.
- ์ ๋ฌธ ํ๋ก๊ทธ๋๋จธ๋ค์ assert๋ฌธ์ ์์ฃผ ์ด๋ค๊ณ ํ๋ค.
~cpp
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("milk.in");
ofstream fout("milk.out");
void InputInitData(int& suf, int& numf, map<int,int>& data, vector<int>& numlist);
int Process(int& suf, int& numf, map<int,int>& data, vector<int>& numlist);
void OutputData(int& numf, map<int,int>& data, vector<int>& numlist);
int main()
{
int numf, suf;
map<int,int> data;
vector<int> numlist;
InputInitData(suf, numf, data, numlist);
fout << Process(suf, numf, data, numlist) << endl;
return 0;
}
void InputInitData(int& suf, int& numf, map<int,int>& data, vector<int>& numlist)
{
fin >> suf;
fin >> numf;
int cost, amount;
for(int i = 0 ; i < numf ; ++i)
{
fin >> cost;
fin >> amount;
if(data[cost] == 0)
numlist.push_back(cost);
data[cost] += amount;
}
sort(numlist.begin(), numlist.end());
}
int Process(int& suf, int& numf, map<int,int>& data, vector<int>& numlist)
{
int ret = 0;
int until = 0;
int whenstop = 0;
for(int i = 0 ; i < numlist.size() ; ++i)
{
if(suf > until + data[numlist[i]])
{
ret += numlist[i] * data[numlist[i]];
until += data[numlist[i]];
}
else
{
whenstop = i;
break;
}
}
if(whenstop < numlist.size())
ret += numlist[whenstop] * (suf - until);
return ret;
}