본문 바로가기
알고리즘/백준 알고리즘

[백준] 9095. 1, 2, 3 더하기 JAVA Kotlin

by Bhinney 2024. 2. 1.
 

9095번: 1, 2, 3 더하기

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

www.acmicpc.net

 


❓ 문제

정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.

  • 1+1+1+1
  • 1+1+2
  • 1+2+1
  • 2+1+1
  • 2+2
  • 1+3
  • 3+1

정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.


 


✍🏻 JAVA

import java.util.Scanner;

public class Main {
   public static void main(String[] args) {
      int[] numbers = scannerFunc();
      int[] dp = dpFunc();

      for (int num : numbers) {
         System.out.println(dp[num]);
      }
   }

   private static int[] scannerFunc() {
      Scanner sc = new Scanner(System.in);
      int n = sc.nextInt();
      int[] numbers = new int[n];
      for (int i = 0; i < n; i++) {
         numbers[i] = sc.nextInt();
      }
      sc.close();
      return numbers;
   }

   private static int[] dpFunc() {
      int[] dp = new int[11];
      dp[1] = 1;
      dp[2] = 2;
      dp[3] = 4;

      for (int i = 4; i <= 10; i++) {
         dp[i] = dp[i - 3] + dp[i - 2] + dp[i - 1];
      }

      return dp;
   }
}

✍🏻 Kotlin

import java.util.Scanner

fun main() {
   val numbers = scan()
   val dp = dp()
   for (i in numbers.indices) println(dp[numbers[i]])
}

fun scan(): IntArray = with(Scanner(System.`in`)) {
   val n = nextInt()
   val numbers = IntArray(n) {nextInt()}
   return numbers
}

fun dp() : IntArray {
   val dp = IntArray(11)
   dp[0] = 0
   dp[1] = 1
   dp[2] = 2
   dp[3] = 4
   for (i in 4 .. 10) dp[i] = dp[i - 3] + dp[i - 2] + dp[i - 1]
   return dp
}

 

댓글