본문 바로가기

Baekjoon98

[백준] 11048번 이동하기 JAVA (자바) 풀이 문제 11048번 (DP) :  N×M 크기의 미로    1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다    현재 (1, 1)에 있고, (N, M)으로 이동하려고 한다    (r, c)에 있으면, (r+1, c), (r, c+1), (r+1, c+1)로 이동 가능, 각 방의 사탕 획득 가능    (N, M)으로 이동할 때, 가져올 수 있는 사탕 개수의 최댓값  [입력] :  첫째 줄에 미로의 크기 N, M (1 ≤ N, M ≤ 1,000)    둘째 줄부터 N개 줄에는 총 M개의 숫자가 주어지며 각각의 사탕의 개수 ( 0 ≤ 사탕 ≤ 100 )  [출력]  :  가져올 수 있는 사탕 개수를 출력  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지.. 2024. 7. 2.
[백준] 9184번 신나는 함수 실행 JAVA (자바) 풀이 문제 9184번 (DP) :  재귀함수 w(a, b, c)가 있다if a 20 or b > 20 or c > 20, then w(a, b, c) returns: w(20, 20, 20)if a   a, b, c가 주어졌을 때, w(a, b, c)를 출력하는 프로그램   otherwise w(2a-2, 2b, c) 출력력  [입력] :  입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다    (입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다)  [출력]  :   w(a, b, c)를 출력  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  .. 2024. 7. 2.
[백준] 11722번 가장 긴 감소하는 부분 수열 JAVA (자바) 풀이 문제 11722번 (DP) :  수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램     예) 수열 A의 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} , 길이 3  [입력] :  첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)    둘째 줄에는 수열 A를 이루고 있는 Ai (1 ≤ Ai ≤ 1,000)  [출력]  :  첫째 줄에 수열 A의 가장 긴 감소하는 부분 수열의 길이를 출력  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식)으로 구성된다 탑다운 (Top-Down) 보텀.. 2024. 7. 1.
[백준] 11051번 이항 계수 2 JAVA (자바) 풀이 문제 11051번 (DP, 수학) : 자연수 N과 정수 K가 주어졌을 때 이항 계수 (𝑁𝐾)를 10,007로 나눈 나머지를 구해라  [입력] :  첫째 줄에  N과 K가 주어진다. (1 ≤ N  ≤ 1,000, 0 ≤ K ≤ N)  [출력]  :  (𝑁𝐾)를 10,007로 나눈 나머지  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식)으로 구성된다 탑다운 (Top-Down) 보텀업 (Bottom-Up)작은 크기로 문제를 나눠서 해결작은 것부터 해결해서 점차 빌드업메모제이션 (memoization)타뷸레이션 (tabulation)일부만 계산.. 2024. 7. 1.
[백준] 1699번 제곱수의 합 JAVA (자바) 풀이 문제 1699번 (DP) : 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다   예를 들어 11 = 3² + 1² + 1² (3개 항) 또는 11 = 2² + 2² + 1² + 1² + 1² (5개 항) 가능하다   11 제곱수 항의 최소 개수는 3이다   주어진 자연수 N 제곱수 항의 최소개수를 구하는 프로그램  [입력] :  첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 100,000)   [출력]  :   제곱수 항의 최소 개수를 출력  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식)으로 구성된다 탑다운 (Top.. 2024. 7. 1.
[백준] 11055번 가장 큰 증가하는 부분 수열 JAVA (자바) 풀이 문제 11055번 (DP) :  수열 A가 주어졌을 때, 그 수열의 증가하는 부분 수열 중에서 합이 가장 큰 것을 구해라    예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가하는    부분 수열은 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 이고, 합은 113  [입력] :  첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)    둘째 줄에는 수열 A를 이루고 있는 Ai (1 ≤ Ai ≤ 1,000)  [출력]  :  수열 A의 합이 가장 큰 증가하는 부분 수열의 합을 출력  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법 .. 2024. 7. 1.
[백준] 1912번 연속합 JAVA (자바) 풀이 문제 1912번 (DP) :  n개의 정수로 이루어진 임의의 수열    연속된 몇 개의 수를 선택해서 가장 큰 합을 구해라 (1개 이상 선택)     예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열일 때 답은 12+21인 33이다  [입력] :  첫째 줄에 정수 n(1 ≤ n ≤ 100,000)    둘째 줄에는 n개의 정수로 이루어진 수열    (수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수)  [출력]  :  첫째 줄에 답을 출력  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식).. 2024. 6. 30.
[백준] 1904번 01타일 JAVA (자바) 풀이 문제 1904번 (DP) : 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일   0이 쓰여진 낱장의 타일들을 붙여서 한 쌍으로 이루어진 00 타일들을 만들었다  현재 1 하나만으로 이루어진 타일 또는 0타일을 두 개 붙인 한 쌍의 00타일들만이 남게 되었다  그러므로 지원이는 타일로 더 이상 크기가 N인 모든 2진 수열을 만들 수 없게 되었다  예를 들어, N=1일 때 1만 만들 수 있고, N=2일 때는 00, 11을 만들 수 있다 (01, 10은 만들 수 없게 되었다.)  또한 N=4일 때는 0011, 0000, 1001, 1100, 1111 등 총 5개의 2진 수열을 만들 수 있다  우리의 목표는 N이 주어졌을 때 지원이가 만들 수 있는 모든 가짓수를 세는 것  [입력] :  첫 번째 줄에 자연.. 2024. 6. 30.
[백준] 2193번 이친수 JAVA (자바) 풀이 문제 2193번 (DP) : 0과 1로만 이루어진 수를 이진수   이친수 특성이친수는 0으로 시작하지 않는다.이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다.   예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수 (하지만 0010101이나 101101 이친수가 아니다)   N(1 ≤ N ≤ 90)이 주어졌을 때, N자리 이친수의 개수를 구하는 프로그램  [입력] :  첫째 줄에 N  [출력]  :   첫째 줄에 N자리 이친수의 개수를 출력  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up.. 2024. 6. 30.
[백준] 11727번 2×n 타일링 2 JAVA (자바) 풀이 문제 11727번 (DP) :  2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수     아래 그림은 2×17 직사각형을 채운 한가지 예   [입력] :  첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)  [출력] :  첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력 [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식)으로 구성된다 탑다운 (Top-Down) 보텀업 (Bottom-Up)작은 크기로 문제를 나눠서 해결작은 것부터 해결해서 점차 빌드업메모제이션 (memoization)타뷸.. 2024. 6. 30.