Coding Test

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

연_우리 2022. 3. 25. 14:30
반응형

목차

     

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

     

    9095번: 1, 2, 3 더하기

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

    www.acmicpc.net

     

     

     

     

    문제풀이

    시간제한이 1초이므로 일반적인 for문은 사용할 수 없다. DP로 풀어보겠다.

    정수 n은 양수이며 11보다 작다. 1, 2, 3의 합으로 나타내야한다.

    [0]~[10]인 배열을 생성했다고하자. [0]은 사용하지 않는다. 

     

    잘 살펴보면

    [2]는 [1]에 +1을 더한값과 자기자신인 2를 가지고 있고

    [3]은 [2]에 +1을 더한값과 자기자신인 3을 가지고 있다.

    [4]는 [3]+1, [2]+2, [1]+3을 더한값을 가지고있지만 자기자신인 "4"는 표현할 수 없기 때문에 제외되었다.

    [5]는 [4]+1, [3]+2, [2]+3, [1]+4로 표현할 수 있지만 "4"는 구성요소인 1, 2, 3이 아니기때문에 제외되었다.

     

     

    제출코드

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class Main {
    
        static int[] nums = new int[11];
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int T = Integer.parseInt(br.readLine());
            nums[0] = 0;
            nums[1] = 1;
            nums[2] = 2;
            nums[3] = 4;
    
            //배열 값 셋팅
            for (int i = 4; i <= 10; i++) {
                 nums[i] = nums[i-3] + nums[i-2] + nums[i-1];
            }
    
            //출력
            for (int t = 0; t < T; t++) {
                int n = Integer.parseInt(br.readLine());
                System.out.println(nums[n]);
            }
        }
    
    }
    반응형
    • 네이버 블러그 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 구글 플러스 공유하기
    • 카카오톡 공유하기