dp 15

1, 2, 3 더하기

문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. 예제 입력 1 3 4 7 10 예제 출력 1 복사 7 44 274 #코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 impor..

[PART2]CH.08_다이나믹 프로그래밍

- 다이나믹 프로그래밍 컴퓨터는 연산 속도에 한계가 있고, 메모리 공간을 사용할 수 있는 데이터의 개수도 한정적이라는 점이 많은 제약을 발생시킨다. 그래서 우리는 연산 속도와 메모리 공간을 최대한으로 활용할 수 있는 효율적인 알고리즘을 작성해야 한다. 다만, 어떤 문제는 메모리 공간을 약간 더 사용하면 연산 속도를 비약적으로 증가시킬 수 있는 방법이 있다. 대표적인 방법이 바로 다이나믹 프로그래밍(Dynamic Programming) 기법으로 동적 계획법이라고 표현하기도 한다. 피보나치 수열의 점화식을 재귀 함수를 사용해 만들 수는 있지만, 단순히 매번 계산하도록 하면 문제를 효율적으로 해결할 수 없다. 이러한 문제는 다이나믹 프록래밍을 사용하면 효율적으로 해결할 수 있다. 다만 항상 다이나믹 프로그래밍..

숫자 만들기

문제 숫자 1, 2, 3을 이용하여 숫자 N을 만드는 경우의 수를 출력하는 프로그램을 작성하시오. 예를 들어, N이 4일 경우에는 다음의 7가지 경우가 존재한다. 단, 경우의 수가 매우 많을 수 있으므로, 경우의 수를 1,000,007 로 나눈 나머지를 출력한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 입력 첫 번째 줄에 N이 주어진다. ( 1 ≤ N ≤ 100,000 ) 출력 1, 2, 3을 이용하여 N을 만들 수 있는 경우의 수를 1,000,007 로 나눈 나머지를 출력한다. 예제 입력 4 예제 출력 7 예제 입력 200 예제 출력 290816 #코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import sys input=sys.st..

연속부분최대의합을 통한 문제풀이 접근법

문제 N개의 정수가 주어질 때, 연속된 부분을 선택하여 합을 최대화 하는 프로그램을 작성하시오. 예를 들어, 아래와 같이 8개의 숫자가 있을 경우, 색칠된 부분을 선택했을 때 그 합이 가장 최대가 된다. 입력 첫 번째 줄에 n이 주어진다. ( 1 ≤ n ≤ 100,000 ) 두 번째 줄에 n개의 정수가 주어진다. 출력 연속된 부분을 선택하였을 때의 최댓값을 출력한다. 예제 입력 8 2 3 -5 8 -3 4 2 -9 예제 출력 11 예제 입력 5 -1 -2 3 -2 4 예제 출력 5 문제해결의 절차 1. 문제를 정확히 이해한다. 2. 문제를 해결하는 알고리즘을 개발한다.(설계) 3. 알고리즘이 문제를 해결한다는 것을 수학적으로 증명한다. 4. 알고리즘이 제한 시간내에 동작한다는 것을 보인다.(시간복잡도) ..

동적계획법과 분할정복 : Dynamic Programing & Divide and Conquer

- 동적 계획법(Dynamic Programing) -> 입력 크기가 작은 부분의 문제들을 해결한 후, 해당 부분 문제의 해를 활용해서 보다 큰 크기의 부분문제를 해결하여 최종적으로 전체 문제를 해결하는 알고리즘. -> 상향식 접근법으로, 가장 최하위 해답을 구한 후, 이를 저장하고 해당 결과값을 이용해서 상위 문제를 풀어가는 방식 -> Memorization 기법을 사용 : 프로그램 실행 시 이전 단계에서의 계산한 값을 저장하여, 다시 계산하지 않도록 하여 전체 실행속도를 빠르게하는 기술. -> 문제를 잘게 쪼갤 때, 부분문제는 중복되어 재활용됨. ex)피보나치 수열 - 분할정복(Divide and Conquer) -> 문제를 나눌 수 없을 때까지 나누어서 각각 풀면서 다시 합벼하여 문제의 답을 얻는 ..

반응형