728x90
반응형
https://www.acmicpc.net/problem/9095
1, 2, 3 더하기 성공다국어
한국어
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 (추가 시간 없음) | 512 MB | 93866 | 61586 | 41930 | 63.982% |
문제
정수 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의 합으로 나타내는 방법의 수를 출력한다.
예제 입력 1 복사
3
4
7
10
예제 출력 1 복사
7
44
274
출처
ICPC > Regionals > Asia Pacific > Korea > Asia Regional - Taejon 2001 PC번
- 문제를 번역한 사람: baekjoon
- 문제의 오타를 찾은 사람: standardraccoon, wjrqur1200
알고리즘 분류
import java.util.Scanner;
public class Main
{
private static Scanner s = new Scanner(System.in);
private static String LINE_SWAP = "\n";
public static void main(String[] args) {
// 1, 2, 3으로만 구해야 하므로 미리 저장
int[] nums = new int[] {1, 2, 3};
// 어차피 1~10까지의 수만 구하면 되므로 미리 연산
int[] answers = new int[11];
for(int i=1; i<=3; i++) {
if(i==1) {
// 1번째는 숫자가 1이라 무조건 하나의 경우의 수가 존재함.
for(int j=1; j<11; j++) {
answers[j] = 1;
}
}
else {
for(int j=nums[i-1]; j<11; j++) {
// 해당 숫자를 이용해 자기 자신을 만들 수 있음.
if(j == nums[i-1]) {
answers[j]++;
}
else {
// 2일 경우 > 전과 전전걸 더하면 됨.
if(nums[i-1] == 2) answers[j] = answers[j-1] + answers[j-2];
// 3일 경우 > 전, 전전, 전전전
else answers[j] = answers[j-1] + answers[j-2] + answers[j-3];
}
}
}
}
// 테스트 케이스 수
int T = s.nextInt();
// 정답
StringBuffer answer = new StringBuffer();
// T만큼 실행
for(int i=0; i<T; i++) {
int N = s.nextInt();
answer.append(answers[N]).append(LINE_SWAP);
}
System.out.println(answer.toString());
}
}
728x90
반응형
'알고리즘 > 문제 풀이(출처 : 백준)' 카테고리의 다른 글
[JAVA/PRIORITY QUEUE] 최대 힙_11279 (0) | 2023.02.24 |
---|---|
[JAVA] 이친수_2193 (0) | 2023.02.06 |
[JAVA/DP] 부녀회장이 될테야_2775 (0) | 2023.02.03 |
[JAVA] 강의실 배정_11000 (0) | 2023.02.01 |
[JAVA]카드2_2164 (0) | 2023.01.24 |