공부/알고리즘

[백준] 9095번 1,2,3 더하기

2020. 12. 12. 17:52

문제

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


풀이

n을 1,2,3의 합으로 나타내는 방법의 수에서 규칙을 발견하였다.

n 1 2 3 4 5
1,2,3의 합 방법 개수 1 2 4 7 13

n이 0일때 1,2,3의 합으로 나타내는 방법의 수를 1로 가정한다면

n을 1,2,3의 합으로 나타내는 방법의 수는 n-1, n-2, n-3의 1,2,3의 합으로 나타내는 방법의 수와 같다.

그래서 아래와 같은 재귀 함수로 문제 해결이 가능하다.

하지만 백준에서 알고리즘 분류를 다이나믹 프로그래밍으로 기재되었기 때문에 다른 방법도 있을 것 같다.

소스코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int count = scanner.nextInt();

        int[] result = new int[count];
        for (int i = 0; i < count; i++) {
            result[i] = solution(scanner.nextInt());
        }

        for (int i = 0; i < result.length; i++) {
            System.out.println(result[i]);
        }
    }

    /**
     * n을 1,2,3의 합을 구하는 방법의 수
     * @param n
     * @return
     */
    public static int solution(int n) {
        switch (n) {
            case 0:
                return 1;
            case 1:
            case 2:
                return n;
        }
        return solution(n - 1) + solution(n - 2) + solution(n - 3);
    }
}

문제 출처 : www.acmicpc.net/problem/9095

 

9095번: 1, 2, 3 더하기

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

www.acmicpc.net

반응형

'공부 > 알고리즘' 카테고리의 다른 글

[백준] 11055번 가장 큰 증가 부분 수열  (0) 2020.12.28
[백준] 11052번 카드 구매하기  (2) 2020.12.20
[백준] 4796번 캠핑  (0) 2020.12.02
[백준] 1712번 손익분기점  (0) 2020.12.01
[백준] 7568번 덩치  (0) 2020.11.30