백준 - 5566번(주사위 게임)

최지홍·2022년 5월 17일
0

백준

목록 보기
132/145

문제 출처: 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);
    }

}

  • 단순 구현 문제이다.
  • 간단한 문제였는데, 문제를 꼼꼼히 읽지 않아 생각보다 시간이 조금 소요됐다. 문제를 풀 때 자세를 다시 한번 정리해야겠다.
profile
백엔드 개발자가 되자!

0개의 댓글