동적계획법(2)
-
[BOJ] #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)을 출력한다. 예제 입력 1 2 6 12 예제 출력 1..
2022.05.26 -
[Algorithm] 동적계획법 (Dynamic Programming) 개념 및 구현
동적계획법 Dynamic Programming 이번 포스팅에선 동적계획법 알고리즘을 살펴보겠다. 동적계획법은 "한 번 계산한 문제는 다시 계산하지 않는다"라는 신념을 가진 녀석이다. 메모리를 조금 써서 속도를 비약적으로 상승시키는 것이 핵심이다. Let's Go 동적계획법이 아니라면? 보통은 단순 재귀. 동적계획법의 성능을 확인할 수 있는 문제가 있다. 바로 피보나치 수열이다. 피보나치 수열을 동적계획법이 아닌 단순 재귀를 사용하여 구현하면 다음과 같다. def fibo(x): if x == 1 or x ==2: return 1 else: return fibo(x-1) + fibo(x-2) 위의 코드로 피보나치 수열을 구한다고 생각해보자. --- fibo(5)를 구하기 위해선, fibo(4)와 fibo(..
2022.05.03