-
5주차 - 카카오 가사검색 문제old/Algorithm 2020. 7. 12. 21:27728x90
#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의 값을 매번 증가 시켰기 때문이다. 하나에 대해서만 증가 시키고, 나머지는 그냥 대입해주는게 효율적이다.
'old > Algorithm' 카테고리의 다른 글
6주차 - 우선 순위 큐 사용 문제 (0) 2020.07.18 6주차 후기(레벨 2가 너무 어려워요) (0) 2020.07.17 5주차 카카오문제(자물쇠와 열쇠) (0) 2020.07.12 5주차 - 카카오 문제 (괄호변환) (0) 2020.07.12 5주차 - 카카오 문제 ( 문자열 압축문제) (0) 2020.07.06