old/Algorithm
5주차 - 카카오 가사검색 문제
hYhY1234
2020. 7. 12. 21:27
728x90
#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
vector<int> solution(vector<string> words, vector<string> queries) {
int wl = words.size();
int ql = queries.size();
vector<int> answer(ql, 0);
map<string, vector<int>> f;
map<string, vector<int>> l;
map<string, vector<int>> e;
for(int i = 0; i < ql; i++){
string qw = queries[i];
string sqw = to_string(qw.size());
if(qw[0] != '?'){
for(int j = 1; j < qw.size(); j++){
if(qw[j] == '?'){
string temp = qw.substr(0, j);
f[temp + sqw].push_back(i);
break;
}
}
}else if(qw[qw.size() - 1] != '?'){
for(int j = 1; j < qw.size(); j++){
if(qw[j] != '?'){
string temp = qw.substr(j);
l[temp + sqw].push_back(i);
break;
}
}
}else{
e[sqw].push_back(i);
}
}
for(int i = 0; i < words.size(); i++){
string cur = words[i];
string scur = to_string(cur.size());
if(e.count(scur) == 1){
// for(int j = 0; j < e[scur].size(); j++){
// answer[e[scur][j]]++;
// }
answer[e[scur][0]]++;
}
for(int j = 1; j < cur.size(); j++){
string ff = cur.substr(0, j) + scur;
if(f.count(ff) == 1){
// for(int k = 0; k < f[ff].size(); k++){
// answer[f[ff][k]]++;
// }
answer[f[ff][0]]++;
}
string ll = cur.substr(j) + scur;
if(l.count(ll) == 1){
// for(int k = 0; k < l[ll].size(); k++){
// answer[l[ll][k]]++;
// }
answer[l[ll][0]]++;
}
}
}
for(auto iter = e.begin(); iter != e.end(); iter++){
vector<int> temp = iter->second;
if(temp.size() > 1){
for(int j = 1; j < temp.size(); j++){
answer[e[iter->first][j]] = answer[e[iter->first][0]];
}
}
}
for(auto iter = f.begin(); iter != f.end(); iter++){
vector<int> temp = iter->second;
if(temp.size() > 1){
for(int j = 1; j < temp.size(); j++){
answer[f[iter->first][j]] = answer[f[iter->first][0]];
}
}
}
for(auto iter = l.begin(); iter != l.end(); iter++){
vector<int> temp = iter->second;
if(temp.size() > 1){
for(int j = 1; j < temp.size(); j++){
answer[l[iter->first][j]] = answer[l[iter->first][0]];
}
}
}
return answer;
}
이건 문제 조건을 잘못봐서 한참 고생했다. 검색 키워드도 중복이 될수가 있다.
효율성은 좀 문제가 있었는게, 이유가 answer의 값을 매번 증가 시켰기 때문이다. 하나에 대해서만 증가 시키고, 나머지는 그냥 대입해주는게 효율적이다.