Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

동그란 도그린

BOJ 9095 - 1, 2, 3 더하기 본문

알고리즘/문제 풀이

BOJ 9095 - 1, 2, 3 더하기

도그rin 2023. 1. 24. 17:11

입력

  • 테스트 케이스 개수 T
  • T개의 줄에 정수 n 입력 (0 ≤ n < 11)

출력

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

풀이 방법

  • 다이나믹 프로그래밍 이용
  • (정수 n을 1,2,3의 합으로 나타내는 경우) = (정수 n-1을 1,2,3의 합으로 나타내는 각각의 경우에 1을 더한 경우) + (정수 n-2를 1,2,3의 합으로 나타내는 각각의 경우에 2를 더한 경우) + (정수 n-3을 1,2,3의 합으로 나타내는 각각의 경우에 3을 더한 경우)
  • 예를 들어, 4를 1,2,3의 합으로 나타내는 경우는
    • (3) +1 = (2+1) +1 = (1+2) +1 = (1+1+1) +1
    • (2) +2 = (1+1) +2
    • (1) +3
    으로, (3을 1,2,3의 합으로 나타내는 방법의 수) + (2를 1,2,3의 합으로 나타내는 방법의 수) + (1을 1,2,3의 합으로 나타내는 방법의 수) = 4+2+1 = 7

코드

import java.io.*;

public class BOJ_9095 {
	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		int T=Integer.parseInt(br.readLine());	// 테스트 케이스 개수
		int[] dp=new int[11];	// 1,2,3의 합으로 나타내는 방법의 수
		
		dp[1]=1;	// 1 = 1+1 (1가지)
		dp[2]=2;	// 2 = 1+1 (2가지)
		dp[3]=4;	// 3 = 2+1 = 1+2 = 1+1+1 (4가지)
		
		for(int i=4;i<11;i++) {	// 다이나믹 프로그래밍
			dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
		}
		
		while(T-->0) {	// 테스트 케이스 개수만큼 반복
			int n=Integer.parseInt(br.readLine());	// 정수 n 입력
			
			System.out.println(dp[n]);	// 정수 n을 1,2,3의 합으로 나타내는 방법의 수 출력
		}
	}
}

 

'알고리즘 > 문제 풀이' 카테고리의 다른 글

Programmers - 올바른 괄호  (0) 2023.02.26
BOJ 2193 - 이친수  (0) 2023.02.11
BOJ 15651 - N과 M (3)  (0) 2023.01.23
BOJ 15650 - N과 M (2)  (0) 2023.01.23
BOJ 15649 - N과 M (1)  (0) 2023.01.19
Comments