【辞書】FINAL問題 辞書 (paizaランク C 相当) 解答例 – PHP編【Cランクレベルアップメニュー】
【Cランクレベルアップメニュー】 > 【辞書】FINAL問題 辞書 (paizaランク C 相当)
※リンク先へ移動する為には「paiza」へのログインが必要です。
問題の意味を理解するのに苦労しました。どういうことなのって(;^ω^)
プログラムの作成には関数や構文を覚えるだけでなく、問題の読解力が必要なんだなっと感じた問題でした。
解答例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php $input = explode(" ",trim(fgets(STDIN))); $numa = $input[0]; $numb = $input[1]; $numc = $input[2]; $array1 = array(); $array2 = array(); for($i = 0;$i < $numa;$i++){ $test = explode(" ",trim(fgets(STDIN))); $array1[$test[0]] = $test[1]; } ksort($array1); for($i = 0;$i < $numb;$i++){ $test = explode(" ",trim(fgets(STDIN))); $array2[$test[0]] = $test[1]; } foreach($array1 as $key => $value){ echo $key." ".$array2[$value]."\n"; } ?> |
解答方針
連想配列を駆使して問題を解いていきます。基本的な考え方として、配列のキーには各グループメンバーの識別番号、要素には仕事を頼んだ人の識別番号を入れていきます。
各情報を取得する
|
1 2 3 4 5 6 |
$input = explode(" ",trim(fgets(STDIN))); // 標準入力から情報の取得 $numa = $input[0]; //Aグループの人数 $numb = $input[1]; //Bグループの人数 $numc = $input[2]; //Cグループの人数 $array1 = array(); //Aグループのi番目の人がBグループのj番目の人に仕事を頼んだことを記録する配列 $array2 = array(); //Bグループのj番目の人がBグループのk番目の人に仕事を頼んだことを記録する配列 |
仕事の流れを記録する
|
1 2 3 4 5 6 7 8 9 10 11 |
for($i = 0;$i < $numa;$i++){ $test = explode(" ",trim(fgets(STDIN))); $array1[$test[0]] = $test[1]; //キーにAグループの人の識別番号、要素に仕事を渡したBグループの人の識別番号を入れる } ksort($array1); //ksortでインデックスキーを昇降順に並べ替える for($i = 0;$i < $numb;$i++){ $test = explode(" ",trim(fgets(STDIN))); $array2[$test[0]] = $test[1]; //キーにBグループの人の識別番号、要素に仕事を渡したCグループの人の識別番号を入れる } |
Aグループの人の仕事がCグループの誰の仕事になったのか解答を出力する
|
1 2 3 |
foreach($array1 as $key => $value){ echo $key." ".$array2[$value]."\n"; } |

