백준 9095번 : 1, 2, 3 더하기

반응형

백준 9095번 : 1, 2, 3 더하기

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

public class Main {

    public void solution() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int count = Integer.parseInt(br.readLine());
        int[] num = new int[11];
        num[1] = 1;
        num[2] = 2;
        num[3] = 4;
        for(int j = 4; j<=10; j++){
            num[j] = num[j-3] + num[j-2] + num[j-1];
        }
        for(int i = 0; i<count; i++){
            sb.append(num[Integer.parseInt(br.readLine())]).append("\n");
        }
        System.out.println(sb);
    }

    public static void main(String args[]) throws IOException {
        new Main().solution();
    }
}

DP(Dynamic programming)의 맛을 처음 보았다. 작은 문제부터 해결해나가면서 점차 범위를 넓혀나가는 상향식 접근법으로 풀이 해야한다. DP문제는 결국 규칙을 찾아내는게 중요한 것 같다. 

 

풀이결론

 

dp[n] = dp[n-1] + dp[n-2] + dp[n-3]  // n >= 4

 

숫자 4의 경우 1,2,3의 경우의 수의 합이 4의 경우의 수라는 규칙이 존재한다.

만약 숫자가 5라면, 2,3,4의 경우의 수의 합이 5의 경우의 수다. 

이 규칙을 활용해 점화식으로 풀면 된다.

반응형

'개발 > 알고리즘' 카테고리의 다른 글

백준 15650번 : N과 M (2)  (0) 2023.01.04
백준 15649번 : N과 M (1)  (0) 2023.01.04
백준 6064번 : 카잉 달력  (0) 2023.01.02
백준 1107번 : 리모컨  (0) 2023.01.02
백준 14500번 : 테트로미노  (0) 2023.01.02