문제 출처: https://www.acmicpc.net/problem/5566
문제
상근이는 혼자 보드 게임을 하고 있다. 이 보드 게임의 보드는 N칸으로 이루어져 있고, 출발점은 1칸, 도착점은 N칸이다. 각 칸에는 지시 사항이 적혀있다. 지시 사항은 말을 얼만큼 이동해야 하는지가 쓰여 있다.
상근이는 도착점에 도착할 때까지 주사위를 굴려 나온 눈의 수만큼 그 칸으로 이동한다. 이때, 도착한 칸에 쓰여 있는 지시만큼 말을 다시 이동시킨다. 지시 사항으로 이동해서 도착한 칸에 쓰여 있는 지시는 따르지 않는다.
N칸에 도착했을 때와 그 칸을 넘는 경우도 도착한 것이다.
상근이가 던졌을 때 나온 주사위의 눈과 보드판의 지시사항이 주어졌을 때, 몇 번 만에 도착하는지 구하는 프로그램을 작성하시오.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
* 1. 단순 구현 문제
* 2. 배열 탐색
* 3. int 형으로 처리 가능
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
int N = Integer.parseInt(tokenizer.nextToken()); // 칸 수
int M = Integer.parseInt(tokenizer.nextToken()); // 주사위 던진 횟수
int[] directive = new int[N + 1];
for (int i = 1; i <= N; i++) {
directive[i] = Integer.parseInt(reader.readLine()); // 지시사항
}
int cnt = 1;
int res = M;
for (int i = 0; i < M; i++) {
int curr = Integer.parseInt(reader.readLine());
// System.out.println("들어온 값: " + curr);
cnt += curr;
// System.out.println("주사위 던진 후 값: " + cnt);
if (cnt < N) {
cnt += directive[cnt];
}
// System.out.println("지시사항 후 값: " + cnt);
if (cnt >= N) {
res = i + 1;
break;
}
}
System.out.println(res);
}
}