본문 바로가기

dp12

[백준] 2579번 계단 오르기 JAVA (자바) 풀이 문제 2579번 (DP) : 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다 계단 오르는 규칙한 번에 한 계단씩 또는 두 계단씩 오르기연속된 세 개의 계단을 모두 밟아서는 안 된다 (단, 시작점은 미포함)마지막 도착 계단은 반드시 밟아야 한다총 점수의 최댓값을 구하는 프로그램을 작성하시오    [입력] :  입력의 첫째 줄에 계단의 개수    둘째 줄부터 한 줄에 하나씩 계단 점수    (계단 개수는 300이하의 자연수, 계단 점수는 10,000이하의 자연수) [출력] :  첫째 줄에 계단 오르기 게임에서 얻을 수 있는 총 점수의 최댓값을 출력 [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단.. 2024. 6. 29.
[백준] 1003번 피보나치 함수 JAVA (자바) 풀이 문제 1003번 (DP)int fibonacci(int n) { if (n == 0) { printf("0"); return 0; } else if (n == 1) { printf("1"); return 1; } else { return fibonacci(n‐1) + fibonacci(n‐2); }} fibonacci(3) = fibonacci(2)와 fibonacci(1) fibonacci(2) = fibonacci(1)과 fibonacci(0)    [입력] :  첫째 줄에 테스트 케이스의 개수 T    각 테스트 케이스에 N이 주어진다 ( N은 40보다 작거나 같은 자연수 또는 0)  [출력] :  각 테스트 케이스.. 2024. 6. 29.
[백준] 9095번 1, 2, 3 더하기 JAVA (자바) 풀이 문제 9095번 (DP) : 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지   합을 나타낼 때는 수를 1개 이상 사용1+1+1+11+1+21+2+12+1+12+21+33+1정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.    [입력] :  첫째 줄에 테스트 케이스의 개수 T    각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다 ( n은 양수이며 11보다 작다)  [출력] :  각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력[설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-do.. 2024. 6. 29.
[백준] 11060번 점프 점프 JAVA (자바) 풀이 문제 11060번 (bfs) :  1×N 크기의 미로 ( 1×1 크기의 칸으로 이루어져 있다)    i번째 칸에 쓰여 있는 수를 Ai  :  Ai이하만큼 오른쪽으로 떨어진 칸으로 한 번에 점프가능    (예 : 3번째 칸에 쓰여 있는 수가 3이면, 재환이는 4, 5, 6번 칸 중 하나로 점프가능)  :  현위치 = 미로의 가장 왼쪽 끝 / 가장 오른쪽 끝으로 가려고 할 때 최소 몇 번 점프를 해야하는지 구해라    (가장 오른쪽 끝으로 갈 수 없다면 -1을 출력)   [입력] :  첫째 줄에 N(1 ≤ N ≤ 1,000) :  둘째 줄에 Ai (0 ≤ Ai ≤ 100)  [출력] :  최소 몇 번 점프를 해야 가장 오른쪽 끝 칸으로 갈 수 있는지 출력     (갈 수 없다면 -1 출력) [설명] 1. 출.. 2024. 6. 19.
[백준] 2670번 연속부분최대곱 JAVA (자바) 풀이 문제 2670번 (DP, 브루트포스) :  N개의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아 곱 출력   → 최대값 = 1.638 [입력] :  첫째 줄 양의 실수들의 개수 N ( N  ≤ 10000 자연수) :  다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다 ( 소수점 첫째자리까지 /  0.0 ≤ 수 ≤ 9.9 )  [출력] :  최댓값을 소수점 이하 넷째 자리에서 반올림해서 출력[설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식)으로 구성된다 탑다운 (Top-Down) 보텀업 (Bottom-Up)작은 크기로.. 2024. 6. 14.
[백준] 14916번 거스름돈 JAVA (자바) 풀이 문제 14916번 (DP) :  거스름돈 = 2원, 5원  :  거스름돈이 n인 경우, 최소 동전의 개수가 몇 개인지 알려주는 프로그램  :  예) 거스름돈이 15원이면 5원짜리 3개, 거스름돈이 14원이면 5원짜리 2개와 2원짜리 2개로 총 4개   [입력] :  첫째 줄에 거스름돈 액수 n (1 ≤ n ≤ 100,000)   [출력] :  거스름돈 동전의 최소 개수를 출력 (거슬러 줄 수 없으면 -1 출력)[설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식)으로 구성된다 탑다운 (Top-Down) 보텀업 (Bottom-Up)작은 크기로 문제를 나.. 2024. 6. 11.
탐색 알고리즘2 (이분탐색, DP) 탐색 DP(Dynamic Programming, 동적 계획법) 겹치는 결과를 별도의 메모리 영역에 저장해서 한번만 계산하고 재사용하도록 한다  DP 공식 f(n) = f(n-1) + f(n-2) 탑다운 (Top-Down) 보텀업 (Bottom-Up)작은 크기로 문제를 나눠서 해결작은 것부터 해결해서 점차 빌드업메모제이션 (memoization)타뷸레이션 (tabulation)일부만 계산해도 답이 나올 때모두 계산해야 답이 나올 재귀반복문시간 복잡도 O(n)시간 복잡도 O(n) DP의 조건최적 부분 구조(Optimal Substructure)큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있다.중복되는 부분 문제(Overlapping Subproblem)부분 문제가 중.. 2024. 6. 3.
[SWEA] 3307. 최장 증가 부분 수열 D3 JAVA (자바) 풀이 문제 3307. 최장 증가 부분 수열 (DP) 수열 : { A1, A2, ... , AN }최장 증가 부분 수열 : { B1, B2, ... , BK }  (0≤K≤N, B1 AB1 ≤ AB2 ≤ ... ≤ ABK인 최대 K로 구성된 수열이다.예를 들어, 수열이 { 1, 3, 2, 5, 4, 7 } 이라면, 최장 부분 증가 수열의 길이는 4가 된다.[입력]: 첫 번째 줄 테스트 케이스의 수 T: 각 테스트 케이스의 첫째 줄에 수열의 길이 N(1≤N≤1,000)  둘째 줄에는 수열의 원소 N개 ( 1 ≤ N  ≤ 2³¹-1 자연수)[출력] ‘#T’ 최대 증가 부분 수열의 길이 출력   [과정] 초기 방식) 시작점을 하나씩 고정하면서 다음 노드로 순차적으로 돌면서 수가 더 크면 길이를 count 하는 방식으.. 2024. 5. 7.
[백준] 12865번 평범한 배낭 JAVA (자바) 풀이 문제 12865 준서가 여행에 필요하다고 생각하는 N개의 물건이 있다 각 물건은 무게 W와 가치 V를 가지는데 해당 물건을 배낭에 넣어서 가면 준서가 V만큼 즐길 수 있다 최대 K만큼의 무게만을 넣을 수 있는 배낭만 들고 다닐 수 있다 물건들의 가치의 최댓값 구하기 [입력] : 첫 줄에 물품의 수 N(1 ≤ N ≤ 100), 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000) : 두 번째 줄부터 N개의 줄까지 물건 무게 W(1 ≤ W ≤ 100,000), 해당 물건의 가치 V(0 ≤ V ≤ 1,000) ( 모든 수는 정수 ) 4 7 6 13 4 8 3 6 5 12 [출력] : 한 줄에 배낭에 넣을 수 있는 물건들의 가치합의 최댓값을 출력 14 [코드] import java.io.*; public cla.. 2024. 2. 5.
[백준] 11053번 가장 긴 증가하는 부분 수열 JAVA (자바) 풀이 문제 11053번 : 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우, 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 각 dp[] 의 길이들은 다음 부분 수열을 의미하는 것이다 출처 https://st-lab.tistory.com/137 dp[0] = 10 이제 나온 것 {10} 중에 가장 길다 = 1 dp[1] = 20 이제 나온 것 {10, 20} 중에 가장 길다 = 2 dp[2] = 10 이제 나온 것 {10, 20} 중에 10까지는 길이가 1밖에 안된다 dp[3] = 30 이제 나온 것 {10, 20, 30} 중에 가장 길다 = 3 dp[4] = 20 이.. 2023. 9. 25.