簡単 0件解決済み 正答率0%

通知のコスト

メール、SMS、プッシュの各チャネルがそれぞれの方法でコストを計算してメッセージを送ります。

このチャレンジで学べること

  • チャネルごとに料金ルールを持たせる
  • 文字数をブロック単位に切り上げる
  • メッセージをチャネルと本文に分ける

問題

原文(英語)を表示

ポリモーフィズムにより、異なるオブジェクトの同じメソッドを呼んでも、それぞれ固有の動作になります。ここでは各チャネルが自分の方法でメッセージのコストを計算します。

各メッセージは <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用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。