問題
ファサード パターンは、複雑なサブシステムへの単純な入口を提供します。店の checkout 呼び出しは、在庫と価格表という 2 つのサブシステムを隠しています。
アイテムには 0 から n − 1 までの番号が付いています。stock[i] はアイテム i の在庫数、prices[i] はその価格です。カートは [item, quantity] の行のリストで、同じアイテムが複数の行に現れてもかまいません。
checkout(stock, prices, cart) は次のことをしなければなりません。
- 在庫を確認する: カート内のあるアイテムの合計数量がその在庫数より大きい場合、注文は失敗します。
- それ以外の場合は、カートの合計金額を返します。
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
例
入力:
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。
入力:
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用に調整されています。上記の説明と制約に従ってください。