테스트 1
입력값 〉[1, 3, 2], ["diamond", "diamond", "diamond", "iron", "iron", "diamond", "iron", "stone"]
기댓값 〉12
실행 결과 〉테스트를 통과하였습니다.
테스트 2
입력값 〉[0, 1, 1], ["diamond", "diamond", "diamond", "diamond", "diamond", "iron", "iron", "iron", "iron", "iron", "diamond"]
기댓값 〉50
실행 결과 〉실행한 결괏값 30이 기댓값 50과 다릅니다.
#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;
}