본문 바로가기

2021하계 모각코

[또 LIE ?] 6주차 결과

문제

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

 

9095번: 1, 2, 3 더하기

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

www.acmicpc.net

코드

package DynamicProgramming;

import java.io.*;

public class OneTwoThreePlus {
    static int[] n;

    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());
        n = new int[12]; // 조건이 n은 양수이며 11보다 작다.

        for (int i = 0; i < T; i++) {
            int value = Integer.parseInt(br.readLine());
            bw.write(dp(value) + "\n");
        }
        bw.flush();
        br.close();
        bw.close();
    }

    static int dp(int x) { // 1,2,3 은 규칙없이 생성되어 값을 지정해준다.
        if (x == 1) {
            return n[x] = 1;
        }
        if (x == 2) {
            return n[x] = 2;
        }
        if (x == 3){
            return n[x] = 4;
        }
        if (n[x] != 0) { // 만약 이미 구한 값이라면 그 값을 바로 반환한다.
            return n[x];
        }
        // 1로 시작할 경우 나머지 경우의 수는 이미 앞의 숫자로 구할 수 있고, 2와 3도 마찬가지로 앞 수에서 값을 찾을 수 있다.
        return n[x] = dp(x - 1) + dp(x - 2) + dp(x - 3);
    }
}

 풀이

└이미 거친 숫자는 바로 숫자를 받아오면 되기 때문에 0이 아닐 때라는 조건을 넣어서 보다 빠른 출력을 할 수 있다.

느낀점

└평소 피보나치 문제를 풀 때 처럼 했으면 많은 시간이 걸렸을 문제이지만, DP를 배운 후로 시간복잡도에 대해 더 자세히 알게 되었다.

'2021하계 모각코' 카테고리의 다른 글

[또 LIE ?] 마치며...  (0) 2021.08.26
[또 LIE ?] 6주차 계획  (0) 2021.08.18
[또 LIE ?] 5주차 결과  (0) 2021.08.11
[또 LIE ?] 5주차 계획  (0) 2021.08.11
[또 LIE ?] 4주차 결과  (0) 2021.08.04