[2025年3月18日 12:48 AM]さんもおっしゃってますが、
平均5分という制限時間の中で、これだけのアルゴを読み解くのはほぼ不可能です。
他の参考書でも、このような問題では、
与えられた数式(以下、公式)がヒントとなるため、この公式を念頭に確認してみようと思います。
・orderは、注文データリストを配列で表すしたもの
・allItemsは、全商品
・otherItemsは、全商品から引数itemを除いた商品
・引数item
これら4つの変数は変数名からイメージしやすいでしょう
▼最初のfor-ifについて
6件の注文数を1つずつ格納しつつ、
itemと等しければitemCountを加算していることから、
公式の分母のKxまたはKyであることが予想される。
/*実数として計算する*/の注釈部分が公式であることは想像できる。
以上から、この部分の処理は、公式Kxの処理をしていると判断できる。
▼次のfor-if-ifについて
forでは、otherItemsを1つずつ格納して、以降のifで判定させている。
2つのif条件から、その注文にitemとotherItem(※)の両方が該当すれば、空欄aに加算している。
以上から、公式のMxyであると判断でき、注釈の公式arrayM[i]だと判断できる。
そして、空欄bは、otherItemの該当数を加算していることから、
公式のKyであると判断でき、注釈の公式arrayK[i]だと判断できる。
(※)変数名は、otherItemsだが、otherItemsを1つずつ検証しているため、敢えてotherItemとしています。
▼注釈の公式について
以上から、残る空欄cは、公式の全注文数を差していることは明白なので、
注文リストである大域変数ordersの要素数だと判断できる。