AOJ1104 Where's Your Robot?
問題リンク Where's Your Robot?
- 概要
H*Wの大きさのボードがある。ロボットが北を向いて(1, 1)にいる。
コマンドを与えられるので、それを実行した後ロボットのいる座標を答えよ。
コマンド実行中、ボードを超えてしまうようなときは、ロボットはそのボードの際の手前で止まる。
W, H <= 100
- 解法
単純なシミュレートです。ロボットの座標と向きを更新していきます。
- ソース
import java.util.Scanner; //Where's Your Robot? public class AOJ1104 { void run(){ Scanner sc = new Scanner(System.in); int[][] move = {{1,0},{0,1},{-1,0},{0,-1}}; while(true){ int c = sc.nextInt(); int r = sc.nextInt(); if((r|c)==0)break; int ri = 1; int rj = 1; int dir = 0; while(true){ String cmd = sc.next(); if("STOP".equals(cmd)){ System.out.println(rj+" "+ri);break; } if("RIGHT".equals(cmd))dir=(dir+1)%4; else if("LEFT".equals(cmd))dir=(dir+3)%4; else if("FORWARD".equals(cmd)){ int k = sc.nextInt(); while(k--!=0){ int ni = ri+move[dir][0]; int nj = rj+move[dir][1]; if(1<=ni&&ni<=r&&1<=nj&&nj<=c){ ri = ni; rj = nj; } else break; } } else{ int k = sc.nextInt(); while(k--!=0){ int ni = ri+move[(dir+2)%4][0]; int nj = rj+move[(dir+2)%4][1]; if(1<=ni&&ni<=r&&1<=nj&&nj<=c){ ri = ni; rj = nj; } else break; } } } } } public static void main(String[] args) { new AOJ1104().run(); } }