알고리즘

[백준] | JAVA, 자바 | 9095번 - 1, 2, 3 더하기

inttype 2025. 1. 30. 22:10

https://www.acmicpc.net/problem/9095


문제 요약 :

1. 테스트 케이스의 개수 T 입력받기

2. T 만큼 정수 N 입력받기

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


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

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

        // 1. 테스트 케이스의 개수 T 입력받기
        int t = Integer.parseInt(br.readLine());

        // 2. T 만큼 정수 N 입력받기
        for (int i = 0; i < t; i++) {
            int n = Integer.parseInt(br.readLine());
            num = 0;
            dfs(0, n, 0);
            sb.append(num).append("\n");
        }
        // 3. 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성
        System.out.println(sb);
    }

    // dfs를 통해 1, 2, 3 을 더 했을 때, idx값이 된다면 num_++
    private static void dfs(int total, int idx, int cnt) {
        if (total == idx) {
            num++;
            return;
        }

        if (total > idx) return;

        dfs(total + 1, idx, cnt + 1);
        dfs(total + 2, idx, cnt + 1);
        dfs(total + 3, idx, cnt + 1);
    }
}