5566.주사위게임

Updated:

Intro

  • 오늘은 Bronze 2 레벨 5566번 주사위게임 문제를 풀어보았습니다.


주사위게임

문제 설명
  • 보드는 N칸으로 이루어져 있습니다.
  • 출발점은 1칸, 도착점은 N칸입니다.
  • 각 칸에는 지시사항이 적혀있으며, 말을 얼만큼 이동해야 하는지가 쓰여있습니다.
  • 도착점에 도착할 때 까지 주사위를 굴려 나온 수만큼 그 칸으로 이동합니다.
  • 이 때, 도착한 칸에 쓰여 있는 지시만큼 말을 다시 이동합니다.
  • 지시 사항으로 이동해서 도착한 칸에 쓰여 있는 지시는 따르지 않습니다.
  • 주사위의 눈과 보드판의 지시사항이 주어졌을 때, 몇 번만에 도착하는지 구하는 프로그램을 작성해보세요.
입력
  • 첫째 줄: 보드 칸수 N, 주사위를 던진 횟수 M
  • N개 줄: -999이상 999이하의 정수가 적혀있으며, i번째 정수는 i번째 칸에 쓰여 있는 지시사항 X입니다.
    • 이 때 X가 0 이면 아무것도 하지 않고 멈춰있습니다.
    • X가 양수인 경우, X칸 더 앞으로 진행하며,
    • 음수인 경우에는 x 칸 뒤로 진행합니다.
  • M개 줄: 1이상 6이하의 정수가 주어집니다. 주사위를 j번째로 던졌을 때 나온 눈 입니다.
조건
  • 1번칸과 N번 칸에 쓰여 있는 지시사항은 항상 0번이며, 항상 주사위를 M번 이하로 던져서 도착할 수 있습니다.
  • 또한, 1보다 작은 칸으로 이동하라는 지시가 있는 경우도 없습니다.


문제 접근 방식
  • 우선, 보드 칸 배열과, 주사위 배열을 각각 만듭니다.
  • 첫번째 칸부터 주사위 배열을 for loop을 돌면서 실행시켜보고, 도착점에 도착했다면 종료시킵니다.


문제 답안
  • N, M = map(int, input().split())
    board = [int(input()) for _ in range(N)]
    dice = [int(input()) for _ in range(M)]
    current = 0
    for idx, i in enumerate(dice):
        # 주사위 숫자 칸만큼 이동한다.
        current += i
        # 만약 이동한 위치가 보드 N칸보다 크면 최종적으로 도착한다.
        if current >= N-1:
            print(idx+1)
            break
        # 도착한 칸의 지시를 따른다.
        move = board[current]
        # 현재 위치/칸을 계산한다.
        current += move
        # 만약 현재 위치가 보드 N 칸보다 크면 최종적으로 도착한다.
        if current >= N-1:
            print(idx+1)
            break
    


Leave a comment