본문 바로가기

dynamic programming2

다이나믹 프로그래밍 (Dynamic Programming) 다이나믹 프로그래밍이란? 다이나믹 프로그래밍은 응용 수학자 리차드 벨만에 의해 고안된 알고리즘으로 이미 반세기가 넘는 시간동안 사용되면 성능을 인정받은 알고리즘이다. 다이나믹 프로그래밍은 복잡한 문제를 단순한 부분 문제로 나누어 해결을 하는 방식의 알고리즘인데 이는 최적 부분 구조(Optimal Substructure)를 가진다고도 표현할 수 있다. 단순한 문제로 나누고 이를 합쳐나가며 해결하는 방식이 Divide and Conquer 방식과 매우 유사하지만 다이나믹 프로그래밍은 중복된 하위 문제들(Overlapping Subproblem)의 결과 값을 저장하고 이를 활용해 풀이해 나간다는 차이가 있다. 보통 중복되는 값을 Array 혹은 Hash Table을 활용하여 저장해두고 필요할때 참조하여 연산을.. 2021. 4. 7.
백준 9461번 (파도반 수열) 문제 문제 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다. 파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다. N이 주어졌을 때, P(N)을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, N이 주어진다. (1 ≤ N ≤ 100) 출력 각 테스트 케이스마다 P(N)을 출력한다. # 메모리제이션으로 활용할 dict생성 .. 2021. 4. 7.