공log/[P&B]

[P&B] #105 BAEKJOON 9095

ming_OoO 2023. 10. 1. 22:37
728x90

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

문제 설명

정수 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의 합으로 나타내는 방법의 수를 출력한다.

 

나의 문제 풀이 코드

import java.io.*;
public class bj9095 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb =new StringBuilder();
        for (int i = 0; i < T; i++) {
            int n = Integer.parseInt(br.readLine());
            int result = checkSum(n);
            sb.append(result+"\n");
        }
        bw.write(sb.toString());
        bw.close();
    }

    private static int checkSum(int n){
        if (n == 1)
            return 1;
        else if (n == 2)
            return 2;
        else if (n == 3)
            return 4;
        else
            return checkSum(n-1)+checkSum(n-2)+checkSum(n-3);
    }
}

 

문제 풀이 코멘트

정수 n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 문제를 해결하는 프로그램입니다. 이 문제는 중복된 계산을 피하며 효율적으로 결과를 계산하기 위해 다이나믹 프로그래밍을 사용합니다.

checkSum(int n) 함수는 n을 1, 2, 3의 합으로 나타내는 방법의 수를 반환하는 재귀 함수입니다. 먼저, n이 1, 2, 3인 경우에 대한 기본값을 반환합니다. 그렇지 않으면 checkSum(n-1), checkSum(n-2), checkSum(n-3)의 합을 반환합니다. 이것은 n을 나타내기 위해 마지막에 사용한 수가 1, 2, 3인 경우의 합을 구하는 것과 동일합니다. 따라서 이 재귀 함수를 사용하여 모든 가능한 조합의 경우의 수를 합산하여 최종 결과를 얻습니다.

예를 들어, n = 4인 경우 checkSum(4)를 호출하면 다음과 같이 계산됩니다:

checkSum(4) = checkSum(3) + checkSum(2) + checkSum(1)
checkSum(3) = checkSum(2) + checkSum(1) + checkSum(0)
checkSum(2) = checkSum(1) + checkSum(0)
checkSum(1) = 1 (기본값)
checkSum(0) = 1 (기본값)
따라서 checkSum(4)는 7이 됩니다. 이것은 정수 4를 1, 2, 3의 합으로 나타내는 모든 가능한 방법의 수입니다.

728x90

'공log > [P&B]' 카테고리의 다른 글

[P&B] #107 BAEKJOON 12789  (1) 2023.10.02
[P&B] #106 BAEKJOON 2606  (1) 2023.10.01
[P&B] #104 BAEKJOON 1463  (0) 2023.10.01
[P&B] #103 BAEKJOON 9375  (0) 2023.10.01
[P&B] #102 BAEKJOON 1003  (0) 2023.10.01