본문 바로가기

728x90

다이나믹 프로그래밍

[C++]백준 1463번: 1로 만들기 문제 https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제이해 첫째 줄에 N을 입력합니다. 연산 횟수의 최솟값을 출력합니다. 이 문제는 다이나믹 프로그래밍을 이용해야 합니다. 배열을 통해 설명해 보겠습니다. dp [i]는 i를 1로 만드는데 걸리는 연산 횟수의 최솟값을 의미합니다. dp [2]와 dp [3]은 당연히 1입니다. dp [4]의 경우 dp [2]에 1을 더한 값 또는 dp [3]에 1을 더한 값인 2입니다. dp [5]는 5 - 1 = 4, 4 - 1 = 3, 3 / 3 = 1 또는 5 - 1 = 4, 4 / 2 = 2, 2 / 2 = 1 이러한.. 더보기
[C++]백준 11727번: 2xn 타일링 2 문제 https://www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net 문제이해 째 줄에 n을 입력합니다. 2xn 크기의 직사각형을 채우는 방법을 10007로 나눈 값을 출력합니다. 이 문제는 다이나믹 프로그래밍을 사용하는 문제입니다. 사용할 수 있는 블록은 2x1로 된 가로블록, 1x2로 된 세로 블록, 2x2로 된 정사각형 블록으로 총 3개가 있습니다. 점화식을 찾기 위해 우선 배열을 통해 설명해 보겠습니다. 2xi 크기의 직사각형을 채우는 방법을 의미합니다. dp [1]은 세로블록 한 .. 더보기
[C++]백준 11726번: 2xn 타일링 문제 https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 문제이해 첫째 줄에 n을 입력합니다. 정답이 되는 방법의 수를 10007로 나눈 나머지를 출력합니다. 이 문제는 다이나믹 프로그래밍을 사용해야합니다. 방법의 수를 찾기 위해서는 우선 점화식부터 찾아야합니다. 이를 배열로써 설명해보겠습니다. dp[i]는 2xi 크기의 직사각형을 채우는 방법의 수를 의미합니다. dp[1]은 1, dp[2]는 2, dp[3]은 3이라고 할 수 있습니다. 그렇다면 dp[4]의 값은 얼마.. 더보기
[C++]백준 1422번: 숫자의 신 문제 https://www.acmicpc.net/problem/1422 1422번: 숫자의 신 첫째 줄에 K와 N이 공백을 사이에 두고 주어진다. K와 N은 각각 50보다 작거나 같은 자연수이고, N은 K보다 크거나 같다. 둘째 줄에는 K개의 수가 한 줄에 하나씩 주어진다. 각 수는 1,000,000,000보다 www.acmicpc.net 문제이해 K와 N을 입력한다. (1 ≤ K ≤ N ≤ 50) 둘째 줄부터 K개의 수(X)를 한 줄에 하나씩 입력한다. (1 ≤ X ≤ 1,000,000,000) N개의 수를 뽑아서 연결해 만들 수 있는 가장 큰 수를 출력한다. 문제를 해결하기 위해서는 수들을 특정 규칙에 따라 정렬해야 한다. 다음의 예시를 보자. 199 10 199와 10을 각각 한번 싹만 사용하여 만.. 더보기
[C++]백준 2293번: 동전 1 문제 https://www.acmicpc.net/problem/2293 2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제이해 첫째 줄에 n과 k를 입력한다. 두 번째 줄부터 n개의 동전에 대한 가치가 주어진다. n개의 동전으로 k를 만들 수 있는 경우의 수를 출력한다. 이 문제는 n개의 전부다 가치가 다른 동전들을 사용하여 k를 만들어 내는 경우의 수를 출력해야 되는 문제이다. 이 문제를 해결하기 위해서는 다이나믹 프로그래밍을 사용해야 한다. 문제에 나와있는 예시를 통해 설명해 보겠다. 가치가 1인 동전을 .. 더보기
[C++]백준 1932번: 정수 삼각형 문제 https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 문제이해 첫째 줄에 삼각형의 높이 n을 입력한다. 두 번째 줄부터 n개의 줄동안 높이가 n인 삼각형을 입력한다. 층마다 선택한 수의 합 중 최댓값을 출력한다. 삼각형의 각 층에서 한개씩의 숫자를 골라 합을 저장하며 마지막 층까지 내려갔을 때 합들 중에서 최댓값을 찾아 출력하면 된다. 각 층에서 나올수있는 합들을 배열에 저장하고 다음 층에서 저장해 놓았던 배열에 전에 했던 것과 마찬가지로 그 층의 수들을 더하는 과정을 반복하면 된다. 다만 이 문제에서 각 층마다 숫.. 더보기

LIST