dynamic programming3 [백준 2579/c++] 계단 오르기 다이나믹 프로그래밍을 이용한 문제이다 특이사항으로 1칸, 2칸 씩만 오를 수 있지만 1칸이 연속되면 안된다는 조건이 걸려있다 1칸 연속이 허용되지 않으면 1칸 2칸 혹은 2칸 1칸 혹은 2칸 2칸 의 순으로 가야되는 것인데 2-1 / 1-2 의 경우는 조건에 맞지 않아 문제가 생긴다 1의 위치가 뒤 앞으로 정해지지 않았을때 생기는 문제이니 1 이후에 2가 무조건 오거나 2 이후에 1이 무조건 오도록 오르게 하면 해결된다 하지만 1이후에 2가 무조건 오게 하는 방법은 1만큼 오르는 것이 필수가 아니므로 1-2 / 2-1 / 2- 2 중 일반화 했을때 1이 먼저 오는 1-2 의 경우는 2-2 를 나타내기 힘드므로 2가 먼저 오게 해서 2 이후에 1이 오는 경우, 안오는 경우 2가지만으로 하여 오르는 방법이 .. 2022. 7. 19. [백준 24416/c++]피보나치 수 1 어제랑 다른 버전의 피보나치 수 문제이다 재귀와 다이나믹 프로그래밍의 차이를 알 수 있는 문제였다 재귀는 반드시 함수를 만들어서 풀어야 하며, 매번 연산을 하면 너무 느리므로 top-down 방식의 memoization 을 사용하여 연산 속도를 향상 시킬 수 있다 (memoization이 필수는 아님) 다이나믹 프로그래밍의 경우 반드시 함수를 만들 필요는 없고 배열과 반복문만으로 만들 수 있으며 bottom-up 방식의 tabulation 을 사용한다 (tabulation이 필수임) 일반적으로 다이나믹 프로그래밍이 재귀함수를 사용한것보다 시간복잡도, 공간복잡도가 낮아서 성능이 좋다 https://www.acmicpc.net/problem/24416 24416번: 알고리즘 수업 - 피보나치 수 1 오늘도 .. 2022. 7. 18. [백준 2748/c++]피보나치 수 2 이전 수와 현재 수를 더해서 다음 수를 만들어 내는 수열을 피보나치 수열이라고 한다 피보나치 수열은 다이나믹 프로그래밍 = 동적 계획법 의 분류에 해당되는데 스스로 재귀하며 답을 도출해내는 과정에서 이전의 계산한 결과는 배열에 넣어서 매번 따로 계산 없이 배열에서 이전 결과값을 그대로 가져와 사용하여 효과적으로 계산할 수 있다 벡터를 이용해서 풀었지만 수가 워낙 크다보니 배열이 많이 필요하지 않아서 앞으로는 간단히 정적 배열로 풀어도 될 것같다 https://www.acmicpc.net/problem/2748 2748번: 피보나치 수 2 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으.. 2022. 7. 17. 이전 1 다음