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