picks, vector#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int mine_str_int(string mineral){
if(mineral == "diamond"){
return 100;
}
else if(mineral == "iron"){
return 10;
}
else if(mineral == "stone"){
return 1;
}
return 0; // 예외 처리를 위해 기본값 추가
}
int solution(vector<int> picks, vector<string> minerals) {
int answer = 0;
vector<int> minerals2;
int len = minerals.size();
int flag = 0;
int mineral = 0;
//광맥의 정렬
//미네랄을 5개 단위로 잘라서 각 광물의 종류를 저장
//세자리수 숫자로 저장
//100자리에 다이아, 10자리에 철, 1자리에 돌개수 저장
for (int i = 0; i<len; i++){
mineral += mine_str_int(minerals.at(i));
flag++;
if(flag == 5){
minerals2.push_back(mineral);
flag = 0;
mineral = 0;
}
}
//나머지 저장
if(flag>0){
minerals2.push_back(mineral);
flag = 0;
mineral = 0;
}
//광맥과 곡괭이 개수를 비교
int stone_pick = picks.at(2);
int iron_pick = picks.at(1);
int dia_pick = picks.at(0);
int all_pick = stone_pick+iron_pick+dia_pick;
int i = 0;
if(all_pick >= minerals2.size()){
//곡괭이가 더 많거나 같을 경우(모든 광맥을 캐야함)
//다이아곡괭이부터 써서 가장 비싼 광맥부터 채굴
//가장 비싼광맥부터 정렬
sort(minerals2.rbegin(), minerals2.rend());
// 다이아 곡괭이 사용
while (dia_pick > 0 && i < minerals2.size()) {
// 다이아 곡괭이로 채굴
answer += (minerals2[i] / 100);
answer += ((minerals2[i] % 100) / 10);
answer += (minerals2[i] % 10);
i++;
dia_pick--;
}
// 철 곡괭이 사용
while (iron_pick > 0 && i < minerals2.size()) {
answer += 5 * (minerals2[i] / 100);
answer += ((minerals2[i] % 100) / 10);
answer += (minerals2[i] % 10);
i++;
iron_pick--;
}
// 돌 곡괭이 사용
while (stone_pick > 0 && i < minerals2.size()) {
answer += 25 * (minerals2[i] / 100);
answer += 5 * ((minerals2[i] % 100) / 10);
answer += (minerals2[i] % 10);
i++;
stone_pick--;
}
}
else{
//광맥이 더 많을 경우 (모든 곡괭이를 써야함)
//돌곡괭이부터 가장 싼 광맥부터 채굴
//가장 싼광맥부터 정렬
sort(minerals2.begin(), minerals2.end());
// 돌 곡괭이 사용
while (stone_pick > 0 && i < minerals2.size()) {
answer += 25 * (minerals2[i] / 100);
answer += 5 * ((minerals2[i] % 100) / 10);
answer += (minerals2[i] % 10);
i++;
stone_pick--;
}
// 철 곡괭이 사용
while (iron_pick > 0 && i < minerals2.size()) {
answer += 5 * (minerals2[i] / 100);
answer += ((minerals2[i] % 100) / 10);
answer += (minerals2[i] % 10);
i++;
iron_pick--;
}
// 다이아 곡괭이 사용
while (dia_pick > 0 && i < minerals2.size()) {
// 다이아 곡괭이로 채굴
answer += (minerals2[i] / 100);
answer += ((minerals2[i] % 100) / 10);
answer += (minerals2[i] % 10);
i++;
dia_pick--;
}
}
return answer;
}
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> mine_str_int(string mineral, vector<int> mine){
if(mineral == "diamond"){
mine[0]++;
}
else if(mineral == "iron"){
mine[1]++;
}
else if(mineral == "stone"){
mine[2]++;
}
return mine;
}
int solution(vector<int> picks, vector<string> minerals) {
int answer = 0;
vector<vector<int>> mineral;
int len = minerals.size();
int flag = 0;
vector<int> mine = {0,0,0};
//미네랄을 5개 단위로 잘라서 각 광물의 종류를 저장
//저장은 3자리 숫자로 저장
//100자리에 다이아, 10자리에 철, 1자리에 돌개수 저장
for (int i = 0; i<len; i++){
mine = mine_str_int(minerals.at(i), mine);
flag++;
if(flag == 5){
mineral.push_back(mine);
flag = 0;
mine = {0, 0, 0};
}
}
//나머지 저장
if(!minerals.empty() && flag > 0){
mineral.push_back(mine);
flag = 0;
mine = {0, 0, 0};
}
//광맥 저장 끝 오름차순 sort
sort(mineral.rbegin(), mineral.rend());
// 다곡, 철곡, 돌곡 순서로 진행
int stone_pick = picks.at(2);
int iron_pick = picks.at(1);
int dia_pick = picks.at(0);
vector<int> stone_mine;
vector<int> iron_mine;
vector<int> dia_mine;
int stone, iron, dia;
for(int i = 0; i<mineral.size(); i++){
stone = 25*mineral.at(i).at(0)+5*mineral.at(i).at(1)+mineral.at(i).at(2);
iron = 5*mineral.at(i).at(0)+mineral.at(i).at(1)+mineral.at(i).at(2);
dia = mineral.at(i).at(0)+mineral.at(i).at(1)+mineral.at(i).at(2);
stone_mine.push_back(stone);
iron_mine.push_back(iron);
dia_mine.push_back(dia);
}
int min;
int min_index;
//곡괭이가 더 많을 경우
//제일 비싼 광맥부터 다곡부터 써서 캠
if((stone_pick+iron_pick+dia_pick)>=stone_mine.size()){
int i = 0;
// 다이아 곡괭이로 채굴
while (dia_pick > 0 && i < stone_mine.size()) {
answer += dia_mine[i];
i++;
dia_pick--;
}
// 철 곡괭이 사용
while (iron_pick > 0 && i < stone_mine.size()) {
answer += iron_mine[i];
i++;
iron_pick--;
}
// 돌 곡괭이 사용
while (stone_pick > 0 && i < stone_mine.size()) {
answer += stone_mine[i];
i++;
stone_pick--;
}
}
//광맥이 더 많을 경우
//돌곡부터 가장 싼 광맥을 캠
else {
while(dia_pick >0 && !dia_mine.empty()){
min_index = min_element(dia_mine.begin(), dia_mine.end()) - dia_mine.begin();
min = *min_element(dia_mine.begin(), dia_mine.end());
answer += min;
stone_mine.erase(stone_mine.begin() + min_index);
iron_mine.erase(iron_mine.begin() + min_index);
dia_mine.erase(dia_mine.begin() + min_index);
dia_pick--;
}
while(iron_pick >0 && !iron_mine.empty()){
min_index = min_element(iron_mine.begin(), iron_mine.end()) - iron_mine.begin();
min = *min_element(iron_mine.begin(), iron_mine.end());
answer += min;
stone_mine.erase(stone_mine.begin() + min_index);
iron_mine.erase(iron_mine.begin() + min_index);
dia_mine.erase(dia_mine.begin() + min_index);
iron_pick--;
}
while(stone_pick>0 && !stone_mine.empty()){
min_index = min_element(stone_mine.begin(), stone_mine.end()) - stone_mine.begin();
min = *min_element(stone_mine.begin(), stone_mine.end());
answer += min;
stone_mine.erase(stone_mine.begin() + min_index);
iron_mine.erase(iron_mine.begin() + min_index);
dia_mine.erase(dia_mine.begin() + min_index);
stone_pick--;
}
}
return answer;
}
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int mine_str_int(string mineral){
if(mineral == "diamond"){
return 100;
}
else if(mineral == "iron"){
return 10;
}
else if(mineral == "stone"){
return 1;
}
return 0; // 예외 처리를 위해 기본값 추가
}
int solution(vector<int> picks, vector<string> minerals) {
int answer = 0;
vector<int> mine;
int len = minerals.size();
int flag = 0;
int mineral = 0;
//미네랄을 5개 단위로 잘라서 각 광물의 종류를 저장
//저장은 3자리 숫자로 저장
//100자리에 다이아, 10자리에 철, 1자리에 돌개수 저장
for (int i = 0; i<len; i++){
mineral += mine_str_int(minerals.at(i));
flag++;
if(flag == 5){
mine.push_back(mineral);
flag = 0;
mineral = 0;
}
}
//나머지 저장
if(flag>0){
mine.push_back(mineral);
flag = 0;
mineral = 0;
}
//각 단위 별로 저장된 3자리숫자를 오름차순 sort
sort(mine.rbegin(), mine.rend());
// 다곡, 철곡, 돌곡 순서로 진행
int stone_pick = picks.at(2);
int iron_pick = picks.at(1);
int dia_pick = picks.at(0);
int i = 0;
// 다이아 곡괭이 사용
while (dia_pick > 0 && i < mine.size()) {
// 다이아 곡괭이로 채굴
answer += (mine[i] / 100);
answer += ((mine[i] % 100) / 10);
answer += (mine[i] % 10);
i++;
dia_pick--;
}
// 철 곡괭이 사용
while (iron_pick > 0 && i < mine.size()) {
answer += 5 * (mine[i] / 100);
answer += ((mine[i] % 100) / 10);
answer += (mine[i] % 10);
i++;
iron_pick--;
}
// 돌 곡괭이 사용
while (stone_pick > 0 && i < mine.size()) {
answer += 25 * (mine[i] / 100);
answer += 5 * ((mine[i] % 100) / 10);
answer += (mine[i] % 10);
i++;
stone_pick--;
}
return answer;
}