Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

전공공부

[BOJ 15989] 1,2,3 더하기4 본문

Study/Problem Solving

[BOJ 15989] 1,2,3 더하기4

monitor 2023. 8. 26. 22:13

DP 문제 인 것을 인식하고 풀었는데도 많이 어려웠다.

 

해설을 위해서 아래 내용을 보자

 

우선 행의 경우 각 숫자의 순서를 나타내고 열의 경우 1,2,3 의 숫자가 마지막에 나올 때의 갯수를 표시한다.

 

아래 식은 갯수를 표시하지 않고 실제 식으로 표현을 하였다.

 

dp[1][1] - 1
dp[1][2] - 0
dp[1][3] - 0

dp[2][1] - 1+1
dp[2][2] -  2
dp[2][3] - 0

dp[3][1] - (1 + 1) + 1
dp[3][2] - 1 + 2
dp[3][3] - 3

dp[4][1] - (1 + 1 + 1) + 1
dp[4][2] - (1 + 1) + 2 , 2 + (2)
dp[4][3] - (1) + 3

dp[5][1] - (1 + 1 + 1 + 1) + 1
dp[5][2] - (1 + 1 + 1) + 2 , + (1 + 2) + 2  
dp[5][3] - (1 + 1) + 3 , (2) + 3

 

위 dp를 자세히 살펴보면 수식을 반복해서 앞의 배열으로 부터 가져와서 사용하는 것을 볼 수 있다.

 

즉, 점화식을 위 식을 기반으로 뽑아내면 아래와 같다.

dp[n][1] = dp[n-1][1];
dp[n][2] = dp[n-2][1] + dp[n-2][2];
dp[n][3] = dp[n-3][1] + dp[n-3][2] + dp[n-3][3];

아래는 전체 코드이다.

import java.util.*;

public class BOJ_15989 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        int dp[][] = new int[10001][4];
        dp[1][1] = 1;
        dp[1][2] = 0;
        dp[1][3] = 0;
        dp[2][1] = 1;
        dp[2][2] = 1;
        dp[2][3] = 0;
        dp[3][1] = 1;
        dp[3][2] = 1;
        dp[3][3] = 1;
        for(int i = 4; i < 10001; i++){
            dp[i][1] = dp[i-1][1];
            dp[i][2] = dp[i-2][1] + dp[i-2][2];
            dp[i][3] = dp[i-3][1] + dp[i-3][2] + dp[i-3][3];
        }
        for(int t = 0; t < T; t++){
            int n = sc.nextInt();
            System.out.println(dp[n][1] + dp[n][2] + dp[n][3] );
        }
    }
}

 

 

15989번: 1, 2, 3 더하기 4

정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 4가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 합을 이루고 있는 수의 순서만 다른 것은 같은 것으로 친다. 1+1+1+1 2+1+1 (1+1+2, 1+2+1) 2+2

www.acmicpc.net

 

'Study > Problem Solving' 카테고리의 다른 글

[BOJ_1522] 문자열 교환  (0) 2023.09.03
[BOJ_1446] 지름길  (0) 2023.08.27
[BOJ 7568] 덩치  (0) 2023.08.20
[BOJ 11286] 절대값 힙  (0) 2023.08.13
[BOJ 2606] 바이러스  (0) 2023.08.12