#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<string> keymap, vector<string> targets) {
vector<int> answer;
for (int i = 0; i < targets.size(); i++) {
string temp = targets[i];
int sum = 0, sign = 0;
for (int j = 0; j < temp.size(); j++) {
vector<int> v;
int check = 0;
for (int k = 0; k < keymap.size(); k++) {
int idx = keymap[k].find(temp[j]);
if (idx != string::npos)
v.push_back(idx + 1);
else
check++;
}
if (check != keymap.size())
sum += *min_element(v.begin(), v.end());
else {
sign = 1;
break;
}
}
if (sum && !sign)
answer.push_back(sum);
else
answer.push_back(-1);
}
return answer;
}
targets의 크기만큼 반복, 내부 루프에서는 temp에 targets의 원소를 하나씩 담으면서 temp의 각각의 알파벳을 k루프에서 찾는다. find함수에서 npos가 아니라면 그 인덱스를 Vector에 넣어주고, 만약 찾지 못한다면 check를 한개씩 올려준다.
왜냐하면 모든 keymap에서 찾지 못하면 그 알파벳은 자판에서 사용할 수 없는 것이니 -1를 push하기 위해서다.
그리고 모든 keymap에서 temp[j] 를 검색했다면, k루프에서 빠져나와 check의 수가 keymap의 사이즈와 같으면 그 자판은 사용할 수 없는 것이니 sign을 1로 만들고 break해준 뒤 외부에서 -1를 push하고, 그것이 아니라면 keymap에서 찾은 자판 입력 횟수 중 가장 작은 횟수를 sum에 넣고, 외부에서 최종 값인 sum을 push해준다.
문제를 이해하는 데 시간이 좀 걸렸다. 그리고 min_element에 접근 시 core dumped가 발생해서 check 조건문을 손보느라 애썼다.