問題
ポリモーフィズムにより、異なるオブジェクトの同じメソッドを呼んでも、それぞれ固有の動作になります。ここでは各チャネルが自分の方法でメッセージのコストを計算します。
各メッセージは <channel> <text> の形で、text は最初の空白より後ろのすべてです:
email: 1 かかります。sms: テキスト 160 文字ごとのブロック(端数も 1 ブロック)につき 5 かかります(1〜160 文字で 1 ブロック)。push: 無料です。
実装してください: notification_cost(messages).
入力
messages: 送信するメッセージ。SMS のテキストは 1 文字以上です。
出力
合計コストを返します。
制約
0 ≤ メッセージの数 ≤ 10,000
テキストは 1〜2,000 文字
例
例 1
入力:
messages = ["email Welcome!", "sms Your code is 1234", "push New follower"]
期待される出力:
expected = 6
入力:
std::vector<std::string> messages = {"email Welcome!", "sms Your code is 1234", "push New follower"};
期待される出力:
long long expected = 6;
入力:
string[] messages = new string[] {"email Welcome!", "sms Your code is 1234", "push New follower"};
期待される出力:
long expected = 6;
解説
メールは 1、短い SMS は 1 ブロック (5)、プッシュは無料: 6。
例 2
入力:
messages = ["sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
期待される出力:
expected = 10
入力:
std::vector<std::string> messages = {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};
期待される出力:
long long expected = 10;
入力:
string[] messages = new string[] {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};
期待される出力:
long expected = 10;
解説
161 文字には 160 文字のブロックが 2 つ必要: 2 × 5 = 10。
解き方のヒント
まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。
ヒント 1
各メッセージを最初の空白で 1 回だけ分割し、チャネルと本文にします。
ヒント 2
SMS は切り上げの割り算でブロック数を数えます: (length + 159) / 160。
ヒント 3
プッシュは無料なので 0 を足します。
目安の計算量
時間 O(合計の長さ)、追加メモリ O(1)
参考資料
この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。