Bakejoon/Silver

[Java] 백준 9095번 : 1,2,3 더하기 <Silver 3>

chattymin 2022. 7. 4. 12:06
728x90
반응형

⚠️ 내맘대로 작성한 코드이기 때문에 비합리적 진행과 근거없는 추론이 있을 수 있습니다!⚠️

 

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

 

9095번: 1, 2, 3 더하기

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

www.acmicpc.net

Code


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;

public class Main {
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

    void run() throws IOException {
        int num = Integer.parseInt(bf.readLine());

        find(num);
    }

    void find(int n) throws IOException{
        for(int i = 0; i < n; i++) {
            ArrayList<Integer> arr = new ArrayList<>(Arrays.asList(1,2,4));
            int goal = Integer.parseInt(bf.readLine());
            int number = 3;
            while (true) {
                if (goal < 4) {
                    System.out.println(arr.get(goal - 1));
                    break;
                }
                number++;

                arr.add(arr.get(number - 2) + arr.get(number - 3) + arr.get(number - 4));
                if (number == goal) {
                    System.out.println(arr.get(number - 1));
                    break;
                }
            }
        }
    }

    public static void main(String[] args) {
        Main my = new Main();
        try{
            my.run();
        }catch(Exception e){}
    }
}

Code 필수 요소

1. Dynamic Programming(동적 프로그래밍) 사용

2. 규칙 찾기

 

// Dynamic Programming(동적 프로그래밍) 사용

한동안 계속해서 풀 예정인 Dynamic Programming문제의 핵심은 이 문제가 Dynamic Programming을 사용해야 한다는 것을 깨닫는 것이다. 

 

// 규칙 찾기

X = (X-1) + (X-2) + (X-3)

 

// 전체적 설명

바텀업 방식을 사용하여 ArryList에 해당하는 값을 하나씩 저장하며 해당 값에 접근한다.

 

동적 계획법이란? 

https://naemamdaelo.tistory.com/27

 

알고리즘 - Dynamic Programming(동적 계획법)

⚠️ 내맘대로 작성한 글이기 때문에 비합리적 진행과 근거없는 추론이 있을 수 있습니다!⚠️ 1. Dynamic Programming이란? 큰 문제를 작은 문제로 나누어 푸는 방식이다. 이러한 방법을 통해 한번 푼

naemamdaelo.tistory.com

 

 

 

-꿑-

728x90
반응형