반응형
문제
정수 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의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.
출력
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
테스트 케이스
접근
처음으로 수를 하나 입력받아서 testcase수를 설정합니다.
정수를 입력받아서 1,2,3으로 표현하는 방법의 가짓수를 출력하는 문제입니다.
저는 최대한 규칙을 찾아서 dp로 문제를 해결하였습니다.
1일때는 1, f(1)=1
2일때는 1+1,2, f(2)=2
3일때는 1+2,2+1,1+1+1, 3, f(3)=4
f(4)= f(3) + f(2) + f(1)
f(5)=f(4) + f(3) + f(2)
다음과 같은 규칙이 성립되어 코드를짜서 문제를 해결했습니다.
코드
import java.awt.desktop.SystemEventListener;
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
/*
9095 problem
*/
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int testcase = Integer.parseInt(br.readLine());
ArrayList<Integer> arr = new ArrayList<>();
//초기값
arr.add(1);
arr.add(2);
arr.add(4);
//11전까지 값넣기
for(int i=3;i<11;i++) {
arr.add(arr.get(i-1)+arr.get(i-2)+arr.get(i-3));
}
//출력
for(int i=0; i<testcase; i++) {
int num = Integer.parseInt(br.readLine());
bw.write(String.valueOf(arr.get(num-1))+"\n");
}
bw.flush();
bw.close();
}
}
주의
1,2,3만 사용할 수 있음에 주의해야한다
반응형
'공부 정리 > 백준' 카테고리의 다른 글
[백준] 자바 2579 계단 오르기 (0) | 2021.07.21 |
---|---|
[백준] 자바 11726 2 x n 타일링 (0) | 2021.07.20 |
[백준] 자바 10866 덱 (0) | 2021.07.19 |
[백준] 자바 16165 걸그룹 마스터 준석이 (0) | 2021.07.16 |
[백준] 자바 4358 생태학 (0) | 2021.07.15 |
댓글