분류 전체보기 249

백준-2156번/포도주 시식 (java)

이 문제의 핵심은 i-1번째의 포도주를 마시는 경우, i-1번째의 포도주를 마시지 않는 경우, i번째 포도주를 마시지 않는 경우로 나뉜다. 1) i-1번째 포도주를 마시지 않는 경우 1 2 3 4 O O X O 2)i-1번째 포도주를 마시는 경우 1 2 3 4 O X O O 3)i번재 포도주를 마시지 않는 경우 1 2 3 O O X 이 3가지 경우의 최댓값이 i번째 까지의 최댓값이 된다. 이를 바탕으로 점화식을 만들어보면 다음과 같다. Math.max(i번째 포도주 안마시는 경우,Math.max(i-1번째 포도주를 안마시는 경우,i-1번째 포도주를 마시는 경우)) 정답 코드 import java.io.BufferedReader; import java.io.IOException; import java.io..

알고리즘/백준 2024.02.28

백준-11057번/오르막 수 (java)

우선 이차원 배열을 만들어준다.(n+1 ==> 수의 길이, 10 ==> 각 자리에 0부터 9까지의 수가 올때의 경우의 수) long[][] dp = new long[n+1][10]; 만약 n이 1인 경우는 0,1,2,3,4,5,6,7,8,9가 있으므로 dp[1][i]를 모두 1로 해준다. 점화식 만들기 ex) i번째 자리에 3이 오는 경우: i-1번째 수에 3~9까지의 수가 올 수 있다. i번째 자리에 x가 오는 경우: i-1번째 수에 x~9까지의 수가 오늘 경우의 합! 점화식 for(int i=2; i

알고리즘/백준 2024.02.23

백준-1309번/동물원 (java)

우선 행의 크기가 N, 열의 크기가 3인 배열을 만들어주자. long [][] dp=new long[n+1][3]; 열의 크기가 3인 이유는 N번째 우리에 사자가 들어가는 경우는 [N][0], 첫번째 우리에 들어가 있을 경우 [N][1], 두번째 우리에 들어가 있는 경우 [N][2] 로 해주기 위함이다. 점화식 만들기 i번째 행의 우리에 사자가 없는 경우 ==> i-1번째 우리에 사자가 없거나, 1번째 우리에 있거나, 2번째 우리에 있는 경우 dp[i][0]=(dp[i-1][1]+dp[i-1][2]+dp[i-1][0])%9901; i번째 행의 1번째 우리에 사자가 있는 경우 ==> i-1번째 우리에 사자가 없거나, 2번째 우리에 있는 경우 dp[i][1]=(dp[i-1][0]+dp[i-1][2])%990..

알고리즘/백준 2024.02.23