【座標系での向きの変わる移動】FINAL問題 座標系での向きの変わる移動 (paizaランク B 相当) 解答例 – PHP編【Aランクレベルアップメニュー】
【Aランクレベルアップメニュー】 > 【座標系での向きの変わる移動】FINAL問題 座標系での向きの変わる移動 (paizaランク B 相当)
※リンク先へ移動する為には「paiza」へのログインが必要です。
ごり押し感が拭えませんが、現在向いてる方向を管理するカウンターを用意し、各方向を向いている時のL、Rの座標変化を定義すれば答えを導けます。本当にコードを短く書けるようなロジカルシンキングを身に付けたい(;^ω^)
解答例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
<?php [$x , $y ,$n] = explode(" ",trim(fgets(STDIN))); $counter = 0; //向きを管理するカウンター for($i = 0; $i < $n; $i++){ $target = trim(fgets(STDIN)); //移動する方向 if($counter == 0/*北を向いている時*/){ if($target == "L"){ $x--; $counter = 1/*西を向く*/; echo $x." ".$y."\n"; }elseif ($target == "R") { $x++; $counter = 2/*東を向く*/; echo $x." ".$y."\n"; } } elseif($counter == 1/*西を向いている時*/){ if($target == "L"){ $y++; $counter = 3/*南を向く*/; echo $x." ".$y."\n"; } elseif($target == "R") { $y--; $counter = 0/*北を向く*/; echo $x." ".$y."\n"; } } elseif($counter == 2/*東を向いている時*/){ if($target == "L"){ $y--; $counter = 0/*北を向く*/; echo $x." ".$y."\n"; } elseif($target == "R"){ $y++; $counter = 3/*南を向く*/; echo $x." ".$y."\n"; } } elseif($counter == 3/*南向いている時*/){ if($target == "L"){ $x++; $counter = 2/*東をむく*/; echo $x." ".$y."\n"; } elseif($target == "R") { $x--; $counter = 1/*西をむく*/; echo $x." ".$y."\n"; } } } ?> |