Study hard
(c++)백준 11060번: 점프 점프 본문
11060번: 점프 점프
재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로 �
www.acmicpc.net
[풀이]
DP로 풀 수 있는 문제!
DP[i] : i번째 칸에서 최소 몇 번 점프해야 N번째 칸에 갈 수 있는지
주어진 칸이 한 칸일 경우, 한 번만 점프해서 N번째 칸에 갈 수 있는 경우, 점프할 수 없는 칸인 경우를 모두 신경써줘야 한다.
#include <iostream>
#include <cstring>//memset
using namespace std;
int N;
int Maze[1001];
int DP[1001];
void solution() {
memset(DP, -1, sizeof(DP));
//칸이 한 개일 때
if (N == 1) {
cout << 0 << '\n';
return;
}
for (int i = N - 1; i >= 1; i--) {
//한 번 점프해서 갈 수 있는 경우
if (Maze[i] + i >= N)
DP[i] = 1;
//점프할 수 없는 칸인 경우
else if (Maze[i] == 0)
continue;
else{
int Min = 1000000;
for (int j = 1; j <= Maze[i]; j++) {
if (DP[i + j] < Min && DP[i + j] != -1)
Min = DP[i + j];
}
if (Min == 1000000)
DP[i] = -1;
else
DP[i] = Min + 1;
}
}
cout << DP[1] << '\n';
}
int main() {
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> Maze[i];
}
solution();
}
'백준 > DP' 카테고리의 다른 글
(c++)백준 15486번: 퇴사 2 (0) | 2020.09.14 |
---|---|
(c++)백준 14501번: 퇴사 (0) | 2020.09.14 |
(c++)백준 11048번: 이동하기 (0) | 2020.09.13 |
(c++)백준 11052번: 카드 구매하기 (0) | 2020.06.10 |
(c++)백준 2011번: 암호코드 (0) | 2020.06.10 |