問題
singleton パターンは、クラスにちょうど 1 つのインスタンスだけを持たせ、誰もがそれを共有することを保証します。これはアプリケーション設定でよく使われます。
空の状態で始まる共有設定を 1 つシミュレートしてください。操作を順番に処理します。
set <key> <value>: キーに値を保存する(古い値があれば置き換える)。get <key>: キーの現在の値を読み取る。未設定ならmissingを返す。
すべての呼び出し元が同じインスタンスを使うため、ある操作で設定された値は、その後のすべての get から見えます。
shared_configuration(operations) を実装してください。
Input
operations: 上の 2 つの形式の文字列。キーと値にはスペースを含みません。
Output
get 操作の結果を、順番どおりに返してください。
制約
1 ≤ 操作の数 ≤ 10,000
キーと値は 1〜20 文字
例
入力:
operations = ["set theme dark", "get theme", "get language"]
期待される出力:
expected = ["dark", "missing"]
入力:
std::vector<std::string> operations = {"set theme dark", "get theme", "get language"};
期待される出力:
std::vector<std::string> expected = {"dark", "missing"};
入力:
string[] operations = new string[] {"set theme dark", "get theme", "get language"};
期待される出力:
string[] expected = new string[] {"dark", "missing"};
解説
theme は dark に設定され、language は設定されていないので missing です: ["dark", "missing"].
入力:
operations = ["set lang en", "set lang vi", "get lang"]
期待される出力:
expected = ["vi"]
入力:
std::vector<std::string> operations = {"set lang en", "set lang vi", "get lang"};
期待される出力:
std::vector<std::string> expected = {"vi"};
入力:
string[] operations = new string[] {"set lang en", "set lang vi", "get lang"};
期待される出力:
string[] expected = new string[] {"vi"};
解説
2 回目の set は、同じ共有インスタンス内の最初の値を置き換えます: ["vi"].
解き方のヒント
まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。
ヒント 1
すべての操作が同じ 1 つのオブジェクトを読み書きします。
ヒント 2
設定はキーから値への辞書で十分です。
ヒント 3
一度も設定されていないキーは missing を返します。
目安の計算量
時間 O(操作の数)、追加メモリ O(キーの数)
参考資料
この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。