문제 내용은 입력으로 입력이 들어올 횟수와 목표값을 받고 1,2,3을 사용해서 목표값을 만들 수 있는 경우의 수를 출력해주면 되는데
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int ans = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
for (int i = 0; i < count; i++) {
int target = Integer.parseInt(br.readLine());
ans = 0;
for (int j = 1; j <= 3; j++) {
recv(target, j, 0);
}
System.out.println(ans);
}
}
public static void recv(int target, int current, int count) {
if (target == current) {
ans += 1;
return;
}
if (current + 1 <= target) {
recv(target, current + 1, count + 1);
}
if (current + 2 <= target) {
recv(target, current + 2, count + 1);
}
if (current + 3 <= target) {
recv(target, current + 3, count + 1);
}
}
}
문제를 풀어보자면 1,2,3으로 값을 한 번씩 보내보면서 1, 2, 3으로 값을 더할 수 있다면 모두 더해가며 반복하는 재귀 형식으로 진행한 뒤 목표값에 도달할 경우, 각기 다른 방식으로 도착했기 때문에 1씩 늘려주면 되고
반복문에서 회전을 한번 끝낼 때마다 그 횟수를 출력하고, 다음 반복 시에는 0으로 맞춰주면서 모든 경우의 수를 출력해줄 수 있다
Leave a Reply