https://www.acmicpc.net/problem/9095
풀이
사용한 알고리즘: 다이나믹 프로그래밍
풀이전략
아래의 표는 n 입력에 따라 합으로 나타낼 수 있는 경우의 수들을 나타낸다.
빨간선을 기준으로
첫번째 문단은 1 + [이전의 경우의수]
두번째 문단은 2 + [2번째 전의 경우의수]
세번째 문단은 3 + [3번째 전의 경우의수]
가 출력되는 것을 확인할 수 있다.
따라서 d[i]를 i 입력 시 합으로 나타낼 수 있는 수의 개수라고 할 때
d[i]=d[i-1]+d[i-2]+d[i-3] 라는 식이 도출된다.
제출코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T=Integer.parseInt(br.readLine());
int d[]=new int[11];
d[1]=1;
d[2]=2;
d[3]=4;
for(int i=4;i<11;++i){
d[i]=d[i-1]+d[i-2]+d[i-3];
}
for(int t=0;t<T;++t){
int n = Integer.parseInt(br.readLine());
System.out.println(d[n]);
}
}
}
'알고리즘||코딩테스트 > 백준' 카테고리의 다른 글
[백준 11725번] 트리의 부모 찾기 - JAVA (0) | 2023.07.31 |
---|---|
[백준 11726번] 2xn 타일링 - JAVA (0) | 2023.07.29 |
[백준 2579번] 계단 오르기 - JAVA (0) | 2023.07.29 |
[백준 2839번] 설탕배달 - JAVA (0) | 2023.07.29 |
[백준 4963번] 섬의 개수 - JAVA (0) | 2023.07.28 |