[プログラマー]オープンチャットルーム


回答日:2021年06月15日

質問する


質問リンク:https://programmers.co.kr/learn/courses/30/lessons/42888

アクセスと解析


各プレイヤーのニックネームをどのように管理するかが重要だと思います.
以下の質問では、与えられた条件に応じてニックネームを変更できる場合は以下のようになります.
グループ内で名前を変更する方法は2つあります.
1.チャットルームを出て、新しいニックネームに入ります.
2.チャットルームでニックネームを変更します.
したがって,「Enter」「Change」であれば,各ユーザのニックネームを最新化する.
そのためにC++STLのmapを用いた.
「Enter」、「Change」の場合のみ、keyをユーザID、valueをニックネームとして指定し、最後に更新して、最新のユーザID別ニックネーム情報を得ることができます.
その後、「Enter」と「Leave」の2つのケースで、チャットルームに表示されたメッセージを保存できます.

コード#コード#

#include <string>
#include <vector>
#include <map>
#include <sstream>

using namespace std;

vector<string> split(string input, char delimiter) {
    vector<string> answer;
    stringstream ss(input);
    string temp;
 
    while (getline(ss, temp, delimiter)) {
        answer.push_back(temp);
    }
    return answer;
}

vector<string> solution(vector<string> record) {
    vector<string> answer;
    map<string, string> id_info;
    
    for (auto str : record) {
        vector<string> v = split(str, ' ');
        if (v[0] == "Enter") {
            id_info[v[1]] = v[2];
        } else if (v[0] == "Change") {
            id_info[v[1]] = v[2];
        }
    }
    for (auto str : record) {
        vector<string> v = split(str, ' ');
        if (v[0] == "Enter") {
            answer.push_back(id_info[v[1]] + "님이 들어왔습니다.");
        } else if (v[0] == "Leave") {
            answer.push_back(id_info[v[1]] + "님이 나갔습니다.");
        } else {
            continue;
        }
    }
    return answer;
}

結果



フィードバック


比較的簡単な問題なので、うまく解決できます.文字列をどのようにグループ化するか、apiを見ずにC++STLをよりよく使用する方法を把握し、これに関連する問題をより多く解決しようとします.