[백준] 2560 : 짚신벌레 (파이썬)
·
Algorithm/DP
DP, 누적합 문제https://www.acmicpc.net/problem/2560 접근 방식 문제를 단순화해서 생각해보자.우리가 구해야하는 값은 N일째 되는 날 살아있는 짚신벌레 수(를 1000으로 나눈 나머지)이다.그러면 dp에 무슨 값을 기록해야할까 ? -> for문을 N번 돌며 dp[i]에 i일에 살아있는 짚신벌레 수를 기록하자.참조해야 하는 배열 없이, 이전 dp 배열에 기록했던 짚신벌레 수를 활용하여 현재 dp 배열의 값(현재 i일째에 살아있는 짚신벌레 수)를 구할 수 있다.dp[i]는 i일째 되는 날에 살아있는 짚신벌레의 수💡 풀이코드 (성공)import sys a, b, d, N = map(int, sys.stdin.readline().split())def sol(a, b, d, N): ..
[백준] 2616 : 소형기관차 (파이썬)
·
Algorithm/DP
DP, 누적합 문제https://www.acmicpc.net/problem/2616 이 문제는 냅색 알고리즘의 변형으로도 볼 수 있을 것 같다.누적합을 저장해준 (1차원) 배열을 만들고, 해당 배열을 활용하여 소형 기관차 3대로 최대 운송할 수 있는 손님수를 구하는 문제이다. 초기 접근 방식객차의 수, 소형 기관차가 최대로 끌 수 있는 객차의 수, 소형 기관차의 갯수(3)에 대한 정보가 주어졌다.처음에 이 문제를 보고 DP로 풀어야겠다고 생각했다. 그러나 초기에는 r = 소형 기관차가 최대로 끌 수 있는 객차의 수, c = 객차의 수에 대한 DP 배열의 형태를 구상하였기에 문제가 생각보다 쉽게 풀리지 않았다.3대의 소형 기관차가 최대로 끌 수 있는 객차의 수는 서로 같다. 여기서 "최대"라는 말에 포커스..
[백준] 7579 : 앱 (파이썬)
·
Algorithm/DP
DP / Knapsack 문제https://www.acmicpc.net/problem/7579 냅색(Knapsack) 알고리즘간단하게 말하면, 한 도둑이 훔치는 배낭에 담을 수 있는 무게의 최댓값이 정해져 있고, 일정 가치와 무게가 있는 짐들을 배낭에 넣을 때, 가치의 합이 최대가 되도록 짐을 고르는 방법을 찾는 문제이다.출처: 위키피디아 냅색 알고리즘은 담을 수 있는 물건이 나눌 수 있냐 없냐에 따라 나눈다. 담을 수 있는 물건이 나누어 질 때(설탕 몇 g 등): 분할가능 배낭문제(Fractional Knapsack Problem)담을 수 있는 물건이 나누어 질 수 없을 때(담는다 or 안담는다): 0-1 배낭문제(0-1Knapsack Problem)해당 문제는 0-1 배낭문제의 경우다.  일반적인 배..
[백준] 12865 : 평범한 배낭 (파이썬)
·
Algorithm/DP
DP / Knapsack 문제https://www.acmicpc.net/problem/12865  냅색(Knapsack) 알고리즘 냅색 알고리즘은 대표적인 동적 계획법(DP) 문제 중 하나로, 주어진 가방에 담을 수 있는 무게 제한과 각 물건의 가치를 고려하여 최대한의 가치를 얻는 문제다. 이 알고리즘은 크게 두 가지 유형으로 나뉜다. 1. 분할 가능한 배낭 문제 (Fractional Knapsack): 물건을 부분적으로 쪼개어 담을 수 있는 경우에 해당한다.각 물건의 가치를 무게로 나눈 값(즉, 무게 대비 가격 비율)을 기준으로 물건을 정렬하여 높은 비율 순서대로 가방에 담는다.가방의 남은 용량보다 물건의 무게가 크다면, 물건을 잘라서 넣는다. 이렇게 하면 쉽게 최대 가치를 얻을 수 있다.2. 0-1 ..
[백준] 2011번 : 암호코드 (파이썬)
·
Algorithm/DP
DP / DFS + Memorization 문제https://www.acmicpc.net/problem/2011 접근 방식어떤 암호가 주어졌을 때, 그 암호의 해석이 몇 가지가 나올 수 있는지 경우의 수 구하기 -> 같은 암호에 대해 반복해서 해석하는 것을 방지하고 계산 효율성을 높이기 위해 dp나 memorization 기법을 활용하자 !-> 암호의 i번째 자리에 대해 이미 구한 가짓수는 dp 또는 memo 배열에 저장해 두자.dfs만 사용하는 것은 불필요한 연산을 반복하게 되므로 memorizatino 기법을 활용하여 memo 배열에 기록하자.-> 만약, memo에 기록해둔 값이 있다면 dfs를 재귀호출하지 않고, memo에 기록해둔 값을 바로 리턴하자. 💡 풀이코드 (성공)'''1. 처음에 생각했..
[백준] 9084번 : 동전 (파이썬)
·
Algorithm/DP
DP 문제https://www.acmicpc.net/problem/9084 9084번: 동전우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어, 30원을 만들기 위해서는www.acmicpc.net 💡 풀이 코드import syst = int(sys.stdin.readline())for _ in range(t): n = int(sys.stdin.readline()) c = list(map(int, sys.stdin.readline().split())) price = int(sys.stdin.readline()) dp = [[0] * (price +..
_은선_
'Algorithm/DP' 카테고리의 글 목록 (2 Page)