본문 바로가기

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++]백준 17070번: 파이프 옮기기 1 문제 https://www.acmicpc.net/problem/17070 17070번: 파이프 옮기기 1 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 www.acmicpc.net 문제이해 첫째 줄에 N을 입력한다. 두번째 줄부터 N x N 크기의 집의 상태를 입력한다. 빈칸은 0이며 벽은 1로 입력한다. (1, 1), (1, 2)에 위치해 있는 파이프를 (N, N)까지 이동시키는 방법의 수를 구해 출력한다. 이 문제에서 주의해야 할 점은 현재 파이프의 방향에 따라 파이프를 옮길 수 있는 방법이 정해져있다는 것이다. 파이프가 가질 수 있는 모양.. 더보기
[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