Computer Science/Algorithm Problem

백준] 5566 - 주사위 게임(JOI 2010 예선)

TwinParadox 2018. 8. 5. 14:15
728x90

시간 제한 : 1초

메모리 제한 : 128MB




입력

첫째 줄에 N과 M이 주어진다. M은 상근이가 주사위를 던짓 횟수이다. (2 ≤ N ≤ 1000, 1 ≤ M ≤ 1000)

다음 N개 줄에는 -999이상 999이하의 정수가 하나씩 적혀있다. i번째 정수는 i번 칸에 써있는 지시사항 X이다. 이 때, X가 0이면 아무것도 하지 않고 그 자리에 멈춰 있는다. X가 양수인 경우에는 X칸 더 앞으로 진행하는 것을, 음수인 경우에는 |X|칸 뒤로 진행하는 것을 나타낸다.

다음 M개 줄에는 1이상 6이하의 정수가 주어진다. j번째 정수는 상근이가 주사위를 j번째로 던졌을 때, 나온 눈이다.

1번 칸과 N번 칸에 써있는 지시사항은 항상 0이다. 또, 항상 주사위를 M번 이하로 던져서 도착할 수 있다.  또, 1보다 작은 칸으로 이동하라는 지시가 있는 경우도 없다.




출력

주사위를 몇 번 던져서 도착할 수 있는지 출력한다.




소스코드

#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
	int n, m, loc = 1, cnt = 0;
	cin >> n >> m;
	vector<int> maps(n+1);
	vector<int> dice(m);
	for (int i = 1; i <= n; i++)
		cin >> maps[i];
	for (int i = 0; i < m; i++)
		cin >> dice[i];

	for (int i = 0; i < m; i++)
	{
		loc += dice[i];
		if (loc >= n)
		{
			cout << i + 1;
			break;
		}
		else
		{
			loc += maps[loc];
			if (loc >= n)
			{
				cout << i + 1;
				break;
			}
		}
	}
}




Tip

단순 시뮬레이션 문제다. 주사위를 던져서 갔을 때 도착했는지, 던져서 도착한 지점의 명령을 따랐을 때 도착했는지 확인하기만 하면 되는 문제다.



728x90