すべてのチャレンジ
簡単 0件解決済み 正答率0%

チェックアウトのファサード

在庫確認と価格合計を、1回のわかりやすい checkout 呼び出しの背後に隠します。

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

  • 複数のサブシステムを 1 回の呼び出しの裏に隠す
  • 請求の前に在庫を確認する
  • 同じ商品のカート行をまとめる

問題

原文(英語)を表示

ファサード パターンは、複雑なサブシステムへの単純な入口を提供します。店の checkout 呼び出しは、在庫と価格表という 2 つのサブシステムを隠しています。

アイテムには 0 から n − 1 までの番号が付いています。stock[i] はアイテム i の在庫数、prices[i] はその価格です。カートは [item, quantity] の行のリストで、同じアイテムが複数の行に現れてもかまいません。

checkout(stock, prices, cart) は次のことをしなければなりません。

  1. 在庫を確認する: カート内のあるアイテムの合計数量がその在庫数より大きい場合、注文は失敗します。
  2. それ以外の場合は、カートの合計金額を返します。

checkout_facade(stock, prices, cart) を実装してください。

Input

stock, prices: それぞれ n 個の値。

cart: [item, quantity] の行。

Output

合計金額を返すか、いずれかのアイテムの在庫が足りない場合は -1 を返します。

制約

1 ≤ n ≤ 1,000

0 ≤ stock[i], prices[i] ≤ 100,000; 0 ≤ カートの行数 ≤ 1,000; 1 ≤ quantity ≤ 1,000

例

例 1
入力:
cart = [
    [0, 2],
    [2, 4]
]
stock = [5, 2, 10]
prices = [3, 20, 1]

期待される出力:
expected = 10
入力:
std::vector<std::vector<long long>> cart = {
    {0, 2},
    {2, 4}
};
std::vector<long long> stock = {5, 2, 10};
std::vector<long long> prices = {3, 20, 1};

期待される出力:
long long expected = 10;
入力:
long[][] cart = new long[][] {
    new long[] {0, 2},
    new long[] {2, 4}
};
long[] stock = new long[] {5, 2, 10};
long[] prices = new long[] {3, 20, 1};

期待される出力:
long expected = 10;

解説

どちらのアイテムも在庫があります。2 × 3 + 4 × 1 = 10。

例 2
入力:
cart = [
    [1, 1],
    [1, 2]
]
stock = [5, 2]
prices = [3, 20]

期待される出力:
expected = -1
入力:
std::vector<std::vector<long long>> cart = {
    {1, 1},
    {1, 2}
};
std::vector<long long> stock = {5, 2};
std::vector<long long> prices = {3, 20};

期待される出力:
long long expected = -1;
入力:
long[][] cart = new long[][] {
    new long[] {1, 1},
    new long[] {1, 2}
};
long[] stock = new long[] {5, 2};
long[] prices = new long[] {3, 20};

期待される出力:
long expected = -1;

解説

Item 1 は合計 3 個になるように 2 回現れますが、在庫は 2 個しかないため、注文は失敗します: -1.

解き方のヒント

まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。

ヒント 1

まず、すべてのカート行について商品ごとの数量を合計します。

ヒント 2

価格を計算する前に、その合計を在庫と比べます。

ヒント 3

足りない商品が 1 つでもあれば、すぐに -1 を返します。

目安の計算量

時間 O(n + カートの行数)、追加メモリ O(n)

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

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