반응형
◎ 문제풀이
문제를 보고 DP를 떠올렸으나 '순서만 다른 것은 같은 것으로 본다'는 조건이 어려웠다. 순서만 다른 정렬을 같게 만들려면 오름차순으로 정렬하면 된다.
+1 로 끝난 식 뒤에는 +1만 올 수 있고
+2로 끝난 식 뒤에는 +1, +2만 올 수 있고
+3으로 끝난 식 뒤에는 +1, +2, +3만 올 수 있다.
예를 들어
dp[4][1] : 4를 만드는데 끝이 1인 경우의 수이다.
dp[4][2] : 4를 만드는데 끝이 2인 경우의 수이다.
dp[4][3] : 4를 만드는데 끝이 3인 경우의 수이다.
dp[4][1] = dp[3][1] = 1
dp[4][2] = dp[2][1] + dp[2][2] = 1 + 1 = 2
dp[4][3] = dp[1][1] + dp[1][2] + dp[1][3] = 1 + 0 + 0 = 1
dp[4][1] + dp[4][2] + dp[4][3] = 1 + 2 + 1 = 4
정답은 4이다.
이를 코드로 구현해보자.
◎ 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//BOJ15989 1,2,3 더하기4
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
while(t-- > 0){
int n = Integer.parseInt(br.readLine());
int[][] dp = new int[n+1][4];
for(int i=1;i<=n;i++){
if(i==1) dp[1][1] = 1;
if(i==2) dp[2][2] = 1;
if(i==3) dp[3][3] = 1;
if(i>1) dp[i][1] = dp[i-1][1];
if(i>2) dp[i][2] = dp[i-2][1] + dp[i-2][2];
if(i>3) dp[i][3] = dp[i-3][1] + dp[i-3][2] + dp[i-3][3];
}
System.out.println(dp[n][1] + dp[n][2] + dp[n][3]);
}
}
}
반응형
'문제풀이 > DP' 카테고리의 다른 글
[PS] BOJ1446 지름길 ( DP ) With JAVA (0) | 2024.02.23 |
---|---|
[PS] BOJ17484 진우의 달 여행 ( DP ) with JAVA (0) | 2024.01.27 |
[PS] BOJ11066 파일 합치기 ( dp ) with JAVA (0) | 2023.09.26 |
[PS] BOJ1520 내리막 길 ( DP + DFS ) with JAVA (0) | 2023.09.11 |
[PS] BOJ15486 퇴사2 ( dp ) with JAVA (0) | 2023.08.30 |