본문 바로가기
Algorithm/Baekjoon

Baekjoon 5566 주사위 게임 JAVA

by Hunveloper 2022. 6. 1.
728x90

 

5566번: 주사위 게임

상근이는 혼자 보드 게임을 하고 있다. 이 보드 게임의 보드는 N칸으로 이루어져 있고, 출발점은 1칸, 도착점은 N칸이다. 각 칸에는 지시 사항이 적혀있다. 지시 사항은 말을 얼만큼 이동해야 하

www.acmicpc.net

문제

상근이는 혼자 보드 게임을 하고 있다. 이 보드 게임의 보드는 N칸으로 이루어져 있고, 출발점은 1칸, 도착점은 N칸이다. 각 칸에는 지시 사항이 적혀있다. 지시 사항은 말을 얼만큼 이동해야 하는지가 쓰여 있다. 

상근이는 도착점에 도착할 때까지 주사위를 굴려 나온 눈의 수만큼 그 칸으로 이동한다. 이때, 도착한 칸에 쓰여 있는 지시만큼 말을 다시 이동시킨다. 지시 사항으로 이동해서 도착한 칸에 쓰여 있는 지시는 따르지 않는다.

N칸에 도착했을 때와 그 칸을 넘는 경우도 도착한 것이다.

상근이가 던졌을 때 나온 주사위의 눈과 보드판의 지시사항이 주어졌을 때, 몇 번 만에 도착하는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 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보다 작은 칸으로 이동하라는 지시가 있는 경우도 없다.

출력

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

풀이

loc 변수는 현재 말이 있는 위치이다.

처음 for문으로 보드판의 지시사항을 입력받고, 두번째 for문에서 주사위 갯수를 입력받으며

보드판의 지시사항에 맞게 말을 움직인다.

이때 보드의 마지막 자리 이상의 위치에 도달하면 for문을 종료하고 주사위 던진 횟수를 출력한다.

코드
import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n=Integer.parseInt(st.nextToken()), m=Integer.parseInt(st.nextToken()), ans=0, loc=0;
		int [] map = new int[n];
		for(int i=0;i<n;i++)
			map[i] = Integer.parseInt(br.readLine());
		for(int i=0;i<m;i++) {
			int dice = Integer.parseInt(br.readLine());
			ans++;
			loc+=dice;
			if(loc>=n)
				break;
			loc+=map[loc];
			if(loc>=n)
				break;
		}
		System.out.println(ans);
	}
}

 

728x90
728x90

'Algorithm > Baekjoon' 카테고리의 다른 글

Baekjoon 1100 하얀 칸 JAVA  (0) 2022.06.01
Baekjoon 6603 로또 JAVA  (0) 2022.06.01
Baekjoon 1145 적어도 대부분의 배수 JAVA  (0) 2022.05.27
Baekjoon 1010 다리 놓기 JAVA  (0) 2022.05.27
Baekjoon 1075 나누기 JAVA  (0) 2022.05.27

댓글