본문 바로가기

DP3

[백준 1010/javascript] 다리 놓기 경우의 수는 너무 많을것 같으니 알고리즘을 생각해봤다 결국은 오른쪽 전체 중에 오른쪽 - 왼쪽 사이트 만큼. 즉 선택되지 않은 것들의 경우의 수를 구하면 되는 문제였다 백트래킹을 쓰려다 머리만 아파지고 콤비네이션(조합) 을 구현해서 풀었다 dp 로도 방법이 있다는데... 굳이 안써도 간단하게도 풀린다 https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net let input = []; const readline = require("readline").c.. 2022. 10. 9.
[백준 9095/javascript] 1, 2, 3 더하기 다이나믹 프로그래밍을 사용하는 문제 1,2,3까지는 직접 경우의 수를 구해보자 4부터는 각각 한단계 전인 3, 2, 1 일때의 경우의 수의 합과 같다.(1,2,3 을 더해주므로) bottom up 방식으로 구현을 위해 배열을 만들고 배열의 인덱스에 각각의 수를 올려가면서 저장해준다 인덱스로 필요한 수들만 꺼내서 계산하면 완성이다 https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net let input = []; const readline = require("readline").createInterface({ input: process.stdin, o.. 2022. 9. 27.
[백준 24416/c++]피보나치 수 1 어제랑 다른 버전의 피보나치 수 문제이다 재귀와 다이나믹 프로그래밍의 차이를 알 수 있는 문제였다 재귀는 반드시 함수를 만들어서 풀어야 하며, 매번 연산을 하면 너무 느리므로 top-down 방식의 memoization 을 사용하여 연산 속도를 향상 시킬 수 있다 (memoization이 필수는 아님) 다이나믹 프로그래밍의 경우 반드시 함수를 만들 필요는 없고 배열과 반복문만으로 만들 수 있으며 bottom-up 방식의 tabulation 을 사용한다 (tabulation이 필수임) 일반적으로 다이나믹 프로그래밍이 재귀함수를 사용한것보다 시간복잡도, 공간복잡도가 낮아서 성능이 좋다 https://www.acmicpc.net/problem/24416 24416번: 알고리즘 수업 - 피보나치 수 1 오늘도 .. 2022. 7. 18.