Coding Test/백준 알고리즘 풀이

[백준] 9095 1,2,3 더하기 (자바) : DP

CSEGR 2024. 8. 24. 17:40
728x90

✔️ 문제 설명

더보기

문제

정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.

  • 1+1+1+1
  • 1+1+2
  • 1+2+1
  • 2+1+1
  • 2+2
  • 1+3
  • 3+1

정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.

출력

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.

예제 입력 1 복사

3
4
7
10

예제 출력 1 복사

7
44
274

 

✔️ 문제 풀이

우선 혼자의 생각으로 이 문제를 풀지 못 했다... ㅎㅎ 블로그를 여러개 찾아보던 중 가장 쉬운 설명으로 이해했고, 가져와봤다! 

 

정수가 주어졌을 때, 1,2,3의 합으로 나타내는 방법의 수를 구해보자. 

정수 방법의 수 케이스 
1 1 1
2 2 1+1, 2
3 4 1+1+1, 1+2, 2+1, 3
4 7 [1+3], [1+1+2, 2+2] , [1+1+1+1, 1+2+1, 2+1+1, 3+1]
5 13 [1+1+3, 2+3], [1+1+1+2, 1+2+2, 2+1+2, 3+2] , [1+3+1, 1+1+2+1, 2+2+1 , 1+1+1+1+1, 1+2+1+1, 2+1+1+1, 3+1+1]

 

우선 4의 경우,

1에서 3을 더하면 4를 만들 수 있다. 따라서 1의 케이스에서 3을 더한다. 

2에서 2를 더하면 4를 만들 수 있다. 따라서 2의 각각의 케이스에서 2를 더한다. 

3에서 1을 더하면 4를 만들 수 있다. 따라서 3의 각각의 케이스에서 1을 더한다. 

 

5의 경우에도,

2에서 3을 더하면 5를 만들 수 있다. 따라서 2의 각각의 케이스에서 3을 더한다.

3에서 2를 더하면 5를 만들 수 있다. 따라서 3의 각각의 케이스에서 2를 더한다. 

4에서 1을 더하면 5를 만들 수 있다. 따라서 4의 각각의 케이스에서 1을 더한다. 

 

결론적으로, N을 1,2,3의 합으로 나타내는 경우의 수

=

(N-1)을 1,2,3의 합으로 나타내는 경우의 수 +

(N-2)을 1,2,3의 합으로 나타내는 경우의 수 +

(N-3)을 1,2,3의 합으로 나타내는 경우의 수

 

점화식을 세워보면, dp[i] = dp[i-1] + dp[i-2] + dp[i-3]  (i>=4) 이 된다. 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    public static void main(String[] args)throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[11];

        arr[1] = 1;
        arr[2] = 2;
        arr[3] = 4;
        for(int j = 4; j<= 10; j++){
            arr[j] = arr[j-1] + arr[j-2] + arr[j-3];
        }

        for(int i = 0; i<n; i++){
            int num = Integer.parseInt(br.readLine());
            System.out.println(arr[num]);
        }

    }
}

 

dp... 어렵다ㅠㅠ 고등학교때 배웠던 귀납적 점화식 찾는 기분...

 

#참고 

https://loosie.tistory.com/392

728x90