array_intersect_key()関数
array_intersect_key($比較したい配列, $比較対象の配列)
同じキーだけを持つ配列 を返す。
ksort()関数
ksort()
は、キーを昇順に並べ替える。
in_array()関数
in_array(探す値, $対象の配列, bool値)
は、
bool値は、true にすれば、型が合っているか確認してくれる。
$recipeNum = (int) trim(fgets(STDIN)); $arrRecipe = []; $i = 0; while($i < $recipeNum) { list($recipeFood, $recipeFoodNum) = explode(' ', trim(fgets(STDIN))); $arrRecipe[$recipeFood] = $recipeFoodNum; $i++; } $myNum = (int) trim(fgets(STDIN)); $arrMyRecipe = []; $i = 0; while($i < $myNum) { list($myFood, $myFoodNum) = explode(' ', trim(fgets(STDIN))); $arrMyRecipe[$myFood] = $myFoodNum; $i++; } // 2. m < n の場合、答えは、ゼロ $finishAll = $myNum < $recipeNum; // 自分が持っていない食材があれば、答えは、ゼロ $finishEverything = false; foreach ($arrMyRecipe as $food => $num) { $finishEverything = !(in_array($food, $arrRecipe)); } if ($finishAll || $finishEverything) { echo 0; die(); } // ksort()を使って、$arrRecipe と $arrMyRecipe のキーを昇順にする // 今回は、この処理は、不要。 ksort($arrRecipe); ksort($arrMyRecipe); // array_intersect_key() を使って、自分の配列を共通項のみの配列に作り直す。 function mySameFood(array $arrMyRecipe, array $arrRecipe): array { return array_intersect_key($arrMyRecipe, $arrRecipe); } $mySameFood = mySameFood($arrMyRecipe, $arrRecipe); $resultArr = []; // 同じキー同士の値で、x / y をする。 foreach ($mySameFood as $food => $num) { $howManyDishes = $mySameFood[$food] / $arrRecipe[$food]; $resultArr[] = floor($howManyDishes); // echo $howManyDishes . PHP_EOL; } echo min($resultArr);