👩‍💻 BOJ 5566サイコロゲーム


💬 アルゴリズムを解くのは久しぶりです.毎日解けます.

📄 質問する


尚根は一人でスケートボードゲームをしています.このチェスゲームのボードはN格で構成されており,始点は1格,終点はN格である.どの欄にも指示事項が書いてあります.指示事項には馬をどれだけ動かすかが書かれています.
尚根はゴールに着く前に、サイコロを投げる回数でその格子に移動します.このとき、到着した格子に書いてある指示に従って馬を移動し直します.指示事項に移動し、到着した欄の指示に従わない.
N格に到着した時には、その格を越える場合も到着していました.
1つのプログラムを作成して、上根が投げる時サイコロの目と碁盤の上の指示を与える時、何度も到着します.

💡 解答方法

  • ボードのN個の数字をアレイに格納します.
  • サイコロの数字で移動馬の位置を保存します.
    -loc:盤上馬の位置
  • 馬の位置の説明を使用して馬の位置を再保存します.
    - loc = loc + tmp
  • 」馬の位置が変わるたびに、到着が確認されます.
    - if(loc >= N) ~
  • 🔥 コード#コード#

    import java.io.IOException;
    import java.util.Scanner;
    
    public class 주사위 {
    
    	public static void main(String[] args) throws IOException {
    		// TODO Auto-generated method stub
    		Scanner sc = new Scanner(System.in);
    		
    		int N = sc.nextInt();
    		int M = sc.nextInt();
    		
    		int map[] = new int[N+1];
    		
    		for(int i = 1; i <= N; i++) {
    			map[i] = sc.nextInt();
    		}
    		
    		int tmp = 1;
    		int loc = 1;
    		for(int i = 1; i <= M; i++) {
    				int mix = sc.nextInt(); // 주사위에서 나온 숫자
    				//System.out.println(map[mix]);
    				//System.out.print("loc");
    				//System.out.println(loc);
    				loc += mix; // 말의 위치
    				
    				// check 로직
    				if(loc >= N) {
    					System.out.println(i);
    					break;
    				}
    				tmp = map[loc];
    				//System.out.print("for");
    				//System.out.println(tmp);
    				
    				loc += tmp; // 말의 위치 다시 적용
    				
    				// check 로직
    				if(loc >= N) {
    					System.out.println(i);
    					break;
    				}
    				//System.out.println(tmp);
    				
    		}
    		
    		
    	}
    
    }