KACA 2019-オープンチャットルーム

5532 ワード

ポリシー


1)使用しているsstreamがどれほど良いか
2)無秩序mapに既存のkey-value、value値が更新可能か

最初の解



->コードは正しく実行されますが、テストケースでは無効です.
1番目の値はidで、2番目の値はニックネームです.
EnterとLeaveを理解するために、Vector>を作成します.
Changeでなければ順番に挿入された状態です.

ソースコード

#include <string>
#include <vector>
#include <unordered_map>
#include <sstream>
using namespace std;

vector<string> solution(vector<string> record) {
   vector<string> answer;
   
   unordered_map<string, string>u;
   vector<pair<string,string>>v;
   for(int i = 0; i < record.size(); i++)
   {
       stringstream ss;
       ss << record[i];
       
       string command, id ,name;
       ss >> command >> id >> name;
       u[id] = name;
       
       if(command != "Change")
       {
           v.push_back({command, id});
       }
       
   }
   
   for(const auto &i : v)
   {
       string word = "";
       if(i.first == "Enter")
       {
           word = u[i.second];
           word += "님이 들어왔습니다.";
       }
       else if(i.first == "Leave")
       {
           word = u[i.second];
           word += "님이 나갔습니다.";
       }
       answer.push_back(word);
   }
   
   return answer;
}

私の考えは間違っている。


->vectorのためにメモリを超えていますか?
本当に間違った考えで近づいたと思います.
=>Leaveはid-ニックネームを更新すべきではありません...

コードが変更されました。

#include <string>
#include <vector>
#include <unordered_map>
#include <sstream>
using namespace std;

vector<string> solution(vector<string> record) {
    
    vector<string>answer;
    unordered_map<string, string>u;
    vector<pair<string,string>>v;
    for(int i = 0; i < record.size(); i++)
    {
        stringstream ss;
        ss << record[i];
        
        string command, id ,name;
        ss >> command >> id >> name;
        
        
        if(command == "Change" || command == "Enter")
        {
            u[id] = name;          
        }
        
        if(command != "Change")
            v.push_back({command, id});
    }
    
    for(const auto &i : v)
    {
        string word = "";
        if(i.first == "Enter")
        {
            word = u[i.second];
            word += "님이 들어왔습니다.";
        }
        else if(i.first == "Leave")
        {
            word = u[i.second];
            word += "님이 나갔습니다.";
        }
        answer.push_back(word);
    }
    
    return answer;
}