🟦/백준
[실버 3] 1, 2, 3 더하기
진뚱이용
2023. 2. 20. 11:46
https://www.acmicpc.net/problem/9095
9095번: 1, 2, 3 더하기
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
www.acmicpc.net
풀기 전:
dp [i]의 정의를 숫자 1, 2, 3 중에 i개 사용 한 거라고 정의하면
n은 최대 10 이므로
dp [10]까지 구하면 모든 경우의 수는 구하고
그다음 dp [10]까지 N이 몇 개 인지 세주면 되나?
푼 후:
되네
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T;
int n;
T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
n = Integer.parseInt(br.readLine());
무난하게 입력받고
ArrayList<ArrayList<Integer>> dp = new ArrayList();
ArrayList<Integer> tmp;
int count = 0;
for (int i = 0; i <= n; i++) {
tmp = new ArrayList<>();
dp.add(tmp);
}
dp.get(0).add(0);
for (int i = 1; i <= n; i++) {
for (int j = 0; j < dp.get(i - 1).size(); j++) {
dp.get(i).add(dp.get(i - 1).get(j) + 1);
dp.get(i).add(dp.get(i - 1).get(j) + 2);
dp.get(i).add(dp.get(i - 1).get(j) + 3);
}
}
for (int i = 1; i <= n; i++) {
for (int j = 0; j < dp.get(i).size(); j++)
if (dp.get(i).get(j) == n) count++;
}
sb.append(count + " ");
System.out.println(sb);
sb.setLength(0);
}
}
}
dp [i]는 dp [i-1]의 각각마다 +1 +2 +3을 저장한다