반응형
개념
- Dynamic Programming
- 이전의 값을 재활용하는 알고리즘
- 예시 : 1~10 숫자중, 이전 값들을 합한 값을 구하라
- 이전의 값을 활용해서 시간복잡도를 줄일 수 있음
- 점화식이 있어야 풀기 쉬움(An = An-1 + An-2)
* for문을 이용해 값을 도출할 때 이전의 결과값과 현재 값을 더하면 시간복잡도를 줄일 수 있음
O(N^2)에서 O(N)이 될 수 있음
아아디어
- A1 : 1, A2 : 2, A3 : 1 + 2
- An = An-1 + An-2
-for문으로 3부터 N까지 돌면서
- 이전값과, 그 이전값을 더해서 저장(이때 10007로 나눈 나머지 값)
시간복잡도
- for : N > O(N)
자료구조
- 방법의 수 배열(An) : int[]
문제풀이
- 백준 11726
1.
/*
1. 아이디어
- 점화식 : An = An-1 + An-2
- N값을 구하기 위해 for문으로 3부터 N까지 값을 구해주기
- 이전값, 그 그이전값을 더해, 10007로 나눠 저장
2. 시간복잡도
- O(N)
3. 자료구조
- DP값 저장용(경우의 수) : int[]
*/
class num_11726
{
static void Main(string[] args)
{
var sr = new StreamReader(Console.OpenStandardInput());
var sw = new StreamWriter(Console.OpenStandardOutput());
int n = Convert.ToInt32(sr.ReadLine());
List<int> result = new List<int>() { 0, 1, 2 };
for (int i = 3; i < n + 1; i++)
{
result.Add((result[i - 1] + result[i - 2]) % 10007);
}
sw.WriteLine(result[n]);
sw.Flush();
sw.Close();
sr.Close();
}
}
- 11726의 문제를 이용해 규칙을 보면 n이 1이면 1, n이 2면 2, n이 3이면 3이라는 값이 나온다
- 이러한 규칙을 기반으로 먼저 list에 0,1,2 라는 규칙을 담은후 An = An - 1 + An - 2의 식에 출력값을 10007로 나눈 나머지 값을 출력한다고 했으니 최종 식은 "(result[i - 1] + result[i - 2]) % 10007"가 되고 이것을 담고 result[n]값을 출력
참고영상
- 바로가기
반응형
'기타 > 코딩테스트 공부' 카테고리의 다른 글
[필수 알고리즘] 다익스트라 (0) | 2025.05.06 |
---|---|
[필수 알고리즘] MST (0) | 2025.05.05 |
[필수 알고리즘] 그리디 (0) | 2025.05.05 |
[필수 알고리즘] 이진탐색 (0) | 2025.05.03 |
[필수 알고리즘] 투포인터 (0) | 2025.05.03 |