반응형
난이도: Silver 2
번호: 11060
사용 함수, 자료 구조: Memoization, Tabulation
생성일: February 28, 2023 3:28 PM
알고리즘 분류: 그래프 이론, 그래프 탐색, 너비 우선 탐색, 다이나믹 프로그래밍
언어: C++
C++
BFS + memoization
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int N;
int arr[1002], memo[1002];
int BFS()
{
queue<int> Q;
memo[0] = 0;
Q.push(0);
while (!Q.empty())
{
int idx = Q.front();
Q.pop();
for (int k = 1; k <= arr[idx] && idx + k < N; k++)
{
int nextIdx = idx + k;
if (memo[nextIdx] > memo[idx] + 1)
{
memo[nextIdx] = memo[idx] + 1;
Q.push(nextIdx);
}
}
}
return memo[N - 1] == 2147483647 ? -1 : memo[N - 1];
}
int main()
{
cin >> N;
fill(memo, memo + 1002, 2147483647);
for (int i = 0; i < N; i++)
cin >> arr[i];
int result = BFS();
cout << result << endl;
return 0;
}
C++
DP + Tabluation
#include <iostream>
#include <algorithm>
using namespace std;
int N, arr[1001], dp[1001];
void _dp()
{
dp[0] = 0;
for (int i = 0; i < N; i++)
for (int k = 1; k <= arr[i] && (i + k) < N; k++)
dp[i + k] = min(dp[i] + 1, dp[i + k]);
}
int main(void)
{
cin >> N;
for (int i = 0; i < N; i++)
{
cin >> arr[i];
dp[i] = 100000;
}
_dp();
cout << (dp[N - 1] == 100000 ? -1 : dp[N - 1]);
}
참고
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ 1652] 누울 자리를 찾아라 C++ (0) | 2023.03.01 |
---|---|
[BOJ 14725] 개미굴 C++ (0) | 2023.03.01 |
[BOJ 21938] 영상처리 c++ (0) | 2023.02.27 |
[BOJ 21736] 헌내기는 친구가 필요해 c++ (0) | 2023.02.25 |
[BOJ 6588] 골드바흐의 추측 C++ (0) | 2023.02.25 |