본문 바로가기

dp43

[DP/동적계획법] 백준 1788 피보나치 수의 확장 - 파이썬(Python) [ Contents ] 1. 문제 (링크 참조) 1788번: 피보나치 수의 확장 첫째 줄에 F(n)이 양수이면 1, 0이면 0, 음수이면 -1을 출력한다. 둘째 줄에는 F(n)의 절댓값을 출력한다. 이 수가 충분히 커질 수 있으므로, 절댓값을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 2. 문제 풀이 피보나치의 '음수 부분'을 구하는 문제입니다. 본래, 피보나치는 n = 2부터 시작하죠. n = 1일 때, f(1) = f(0) + f(-1) 이므로 f(-1) = f(1) - f(0) = 1 피보나치의 정의를 역이용하면, f(-1)도 구할 수 있습니다. 즉, 음수 부분을 구할 때에는 조금 식이 달라집니다. f(n-2) = f(n) - f(n-1) f(-1) = f(1.. 2022. 8. 30.
[DP/동적계획법] 백준 13699 점화식 - 파이썬(Python) [ Contents ] 1. 문제 (링크 참조) 13699번: 점화식 다음의 점화식에 의해 정의된 수열 t(n)을 생각하자: t(0)=1 t(n)=t(0)*t(n-1)+t(1)*t(n-2)+...+t(n-1)*t(0) 이 정의에 따르면, t(1)=t(0)*t(0)=1 t(2)=t(0)*t(1)+t(1)*t(0)=2 t(3)=t(0)*t(2)+t(1)*t(1)+t(2)*t(0)=5 ... 주어진 입력 0 ≤ n www.acmicpc.net 2. 문제 풀이 t(0) = 1 t(n) = t(0)*t(n-1) + t(1)*t(n-2) + ... + t(n-1)*t(0) 위와 같은 점화식이 주어집니다. 점화식에 따라 t(n)을 구해야 합니다. 2022.02.12 - [Algorithm] - [Algorithm] .. 2022. 8. 27.
[DP/동적계획법] 백준 15486 퇴사 2 - 파이썬(Python) [ Contents ] 1. 문제 (링크 참조) 15486번: 퇴사 2 첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000) www.acmicpc.net 2. 문제 풀이 작업 스케줄이 주어집니다. 작업 시작일과 걸리는 일 수, 수익을 고려해서 최대 수익을 계산해야 합니다. 2022.05.30 - [Algorithm] - [DP/동적계획법] 백준 14501 퇴사 - 파이썬(Python) 퇴사 1과 달리, 일 수가 15가 아니라 1,500,000입니다. 상당히 크므로 그리디가 아닌 DP로만 풀 수 있습니다. 풀이 방법은 위 글에서 참조하실 .. 2022. 8. 24.
[분할정복/DP] 백준 15624 피보나치 수 7 - 파이썬(Python) [ Contents ] 1. 문제 (링크 참조) 15624번: 피보나치 수 7 첫째 줄에 n번째 피보나치 수를 1,000,000,007으로 나눈 나머지를 출력한다. www.acmicpc.net 2. 문제 풀이 짧은 시간 제한(1초) 내에 피보나치 수를 구해야 합니다. 2022.05.14 - [Algorithm] - [분할정복/DQ] 백준 11444 피보나치 수 6 - 파이썬(Python) 이를 위해서는 분할정복 또는 DP를 이용해야 합니다. 여기서는 피보나치 6에서 사용했던 분할 정복을 이용했습니다. 해당 방식에 대한 설명과 코드는 위 링크에 기재되어 있습니다. 3. 코드 # 입력 N = int(input()) matrix = [[1, 1], [1, 0]] # 행렬 곱셈 def mul_matrix(mat.. 2022. 7. 27.
[동적계획법/DP] 백준 1309 동물원 - 파이썬(Python) [ Contents ] 1. 문제 (링크 참조) 1309번: 동물원 첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다. www.acmicpc.net 2. 문제 풀이 2 * N 칸인 동물원에 사자가 배치될 수 있는 모든 경우의 수를 구하는 문제입니다. 사자는 '가로와 세로'로 붙어있을 수 없습니다. 2022.02.12 - [Algorithm] - [Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP) [Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP) [ Contents ] 1. 동적 프로그래밍(Dynamic Programming, 동적계획법) 동적계획법(Dynamic programming, DP): 작은 문제들에 대한 결과를 배열(리스트)에 저장하고, 이.. 2022. 7. 23.
[동적계획법/DP] 백준 11048 이동하기 - 파이썬(Python) [ Contents ] 1. 문제 (링크 참조) 11048번: 이동하기 준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 www.acmicpc.net 2. 문제 풀이 (0, 0)부터 (N-1, M-1)까지 우하향으로 이동하며 최대 점수를 획득하는 문제입니다. 2022.02.12 - [Algorithm] - [Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP) [Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP) [ Contents ] 1. 동적 프로그래밍(Dynamic Programming, 동적계획법) 동적계.. 2022. 7. 17.
[동적계획법/DP] 백준 11057 오르막 수 - 파이썬(Python) [ Contents ] 1. 문제 (링크 참조) 11057번: 오르막 수 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수 www.acmicpc.net 2. 문제 풀이 길이가 N인 오르막 수를 구하는 문제입니다. 2022.06.02 - [Algorithm] - [DP/동적계획법] 백준 1904 01타일 - 파이썬(Python) DP문제로, 백준 01타일과 비슷합니다. 길이가 i-1인 오르막 수에서, 맨 끝자리보다 같거나 큰 숫자를 덧붙여서 길이가 i인 오르막 수를 만듭니다. 예를 들어 길이가 3이고 맨 끝자리가 2인 오르막 수 c.. 2022. 7. 7.
[동적계획법/DP] 백준 9184 신나는 함수 실행 - 파이썬(Python) [ Contents ] 1. 문제 (링크 참조) 9184번: 신나는 함수 실행 입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다. www.acmicpc.net 2. 문제 풀이 if a 20, then w(a, b, c) returns: w(20, 20, 20) if a < b and b < c, then w(a, b, c) returns: w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) otherwise it returns: w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1) .. 2022. 6. 30.
[동적계획법/DP] 백준 2294 동전 2 - 파이썬(Python) [ Contents ] 1. 문제 (링크 참조) 2294번: 동전 2 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주 www.acmicpc.net 2. 문제 풀이 동전의 개수가 최소가 되도록 만들어야 합니다. 2022.02.12 - [Algorithm] - [Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP) [Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP) [ Contents ] 1. 동적 프로그래밍(Dynamic Programming, 동적계획법) 동적계획법(Dynamic progr.. 2022. 6. 26.