본문 바로가기

DP23

[백준] 1351번 - 무한 수열 (C++) 문제 및 풀이 문제) 백준 - 동적 계획법(Dynamic Programming) - 무한 수열 -> https://www.acmicpc.net/problem/1351 1351번: 무한 수열 첫째 줄에 3개의 정수 N, P, Q가 주어진다. www.acmicpc.net 친절(?)하게도 점화식이 주어졌다. N의 범위가 10^12까지이므로 배열로 memoization 하는 것은 불가능하다. 또한 N이 P와 Q로 계속 나누어지기 때문에 10^12까지 인덱싱 하는 것은 비효율적이다. 따라서 map을 이용하여 memoization을 통해 기존 Top-down 방식의 Dp를 구현했다. C++ 소스코드) 2021. 7. 6.
[백준] 1904번 - 01타일 (C++/파이썬) 문제 및 풀이 문제) 백준 - 동적 계획법 1(Dynamic programming)- 01타일 -> www.acmicpc.net/problem/1904 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이 www.acmicpc.net dp 가능한 숫자 dp[1] 1 dp[2] 11 00 dp[3] 111 001 100 dp[4] 1111 0011 1001 1100 0000 ... dp[n] dp[n - 1] ... dp[n - 2] n을 숫자의 길이, dp[n]에 해당하는 값을 가능한 숫자의 개수라 하자. '00' 타일과 '1' 타일을 붙이는데 별 다른 제약 조.. 2021. 3. 4.
[백준] 11053번 - 가장 긴 증가하는 부분 수열 (파이썬) 문제) 백준 - 동적 계획법 (Dynamic programming) - 가장 긴 증가하는 부분 수열 -> www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 각 숫자로 만들 수 있는 가장 긴 증가하는 부분 수열의 길이를 저장할 length 리스트를 선언한다. 각 숫자(i)들을 차례대로 순회(0 ~ n)하면서 해당 숫자(i)보다 작고 가장 긴 증가하는 부분 수열을 찾아 그 길이에서 1을.. 2021. 3. 2.
[백준] 2293번 - 동전 1 (파이썬) 문제) 백준 - 동적 계획법 (Dynamic programming) - 동전 1 -> www.acmicpc.net/problem/2293 2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net 주어진 동전들을 이용해서 k원을 만드는 방법의 수를 구하는 것이다. 아래 을 보자. dp[k]를 만들 수 있는 경우의 수라 하자. i(화폐가치)가 1일 때 dp[5] = dp[4]이다. 엄밀히 말하면, 현재 dp[5] 값이 0이기 때문에 dp[5] = dp[5] + dp[4]라 볼 수 있다. i(화폐가치)가 2일 때 dp[5] .. 2021. 2. 11.
[백준] 10942번 - 팰린드롬? (파이썬/C++) 문제) 백준 - 동적 계획법 (Dynamic programming) - 팰린드롬? -> www.acmicpc.net/problem/10942 10942번: 팰린드롬? 총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다. www.acmicpc.net dp를 n x n의 2차원 배열로 선언한다. 예를 들어 리스트의 인덱스에 대해 1부터 3까지 팰린드롬이라면, dp[1][3] = True로 설정한다. 즉, 부분 리스트 인덱스의 시작 start와 인덱스의 끝 end를 이용해 검사해 팰린드롬일 경우 dp[start][end]를 True, 아닐 경우 False로 정한다. 팰린드롬의 검사는 검사하려는 부분 리스트의 내부.. 2021. 2. 9.
반응형