본문 바로가기

백준

백준5566 - 주사위 게임

https://www.acmicpc.net/problem/5566

 

5566번: 주사위 게임

문제 상근이는 혼자 보드 게임을 하고 있다. 이 보드 게임의 보드는 N칸으로 이루어져 있고, 출발점은 1칸, 도착점은 N칸이다. 각 칸에는 지시 사항이 적혀있다. 지시 사항은 말을 얼만큼 이동해야 하는지가 쓰여 있다.  상근이는 도착점에 도착할 때까지 주사위를 굴려 나온 눈의 수만큼 그 칸으로 이동한다. 이때, 도착한 칸에 쓰여 있는 지시만큼 말을 다시 이동시킨다. 지시 사항으로 이동해서 도착한 칸에 쓰여 있는 지시는 따르지 않는다. N칸에 도착했을 때와

www.acmicpc.net

문제에 주어진대로 코딩하면 되는 문제였다. 주사위를 굴렸을 때 내가 원하는 도착점보다 멀리 갔거나 주사위를 굴린 후 도착한 곳에 명령을 따라 도착한 곳이 도착점보다 멀리 갔으면 탈출하고 총 몇번만에 수행하였는지 출력한다.

 

#include <iostream>
#include <vector>
using namespace std;
int main() {
	vector<int> mat; //땅에 적힌 명령
	vector<int> dice; //던져서 나온 주사위의 눈
	int n, m; //n위치에 도달, m번 던짐
	int num; //임시변수
	int start = 1; //시작하는 곳
	int cnt = 0; //명령 수행 횟수

	cin >> n >> m;
	
	//땅에 적힌 명령 입력
	for (int i = 0; i < n; i++) {
		cin >> num;
		mat.push_back(num);
	}

	//던져서 나온 주사위의 눈 입력
	for (int i = 0; i < m; i++) {
		cin >> num;
		dice.push_back(num);
	}

	//명령 수행, 주사위를 던진 횟수만큼 반복
	for (int i = 0; i < m; i++) {
		cnt++; //명령 횟수 증가
		start = start + dice[i]; //주사위를 던지고 현재 위치 갱신
		if (start >= n) { //n보다 멀리 갔으면
			break; //탈출
		}
		start = start + mat[start - 1]; //도착한 곳에 명령을 따라 이동
		if (start >= n) { //n보다 멀리 갔으면
			break; //탈출
		}
	}

	cout << cnt; //명령 수행 횟수 출력
}

'백준' 카테고리의 다른 글

백준1236 - 성 지키기  (0) 2019.07.31
백준1644 - 소수의 연속합  (0) 2019.07.31
백준17214 - 다항 함수의 적분  (0) 2019.07.30
백준4889 - 안정적인 문자열  (0) 2019.07.30
백준1699 - 제곱수의 합  (0) 2019.07.28