목록9095 (3)
황소개발자
#include int main() { int t; scanf("%d", &t); int arr[11] = {}; arr[0] = 1; arr[1] = arr[1 - 1]; arr[2] = arr[2 - 2] + arr[2 - 1]; arr[3] = arr[3 - 3] + arr[3 - 2] + arr[3 - 1]; for (int i = 4; i < 11; i++) { arr[i] = arr[i - 3] + arr[i - 2] + arr[i - 1]; } for (int i = 0; i < t; i++){ int n; scanf("%d", &n); printf("%d\n", arr[n]); } } 끝에 3을 붙여서 되거나 2를 붙여서 되거나 1을 붙여서 되거나
뭐야 짬밥먹고 푸니 간단하네 import sys input = sys.stdin.readline def go(x, n): global count if x == n: count += 1 if x > n: return go(x + 1, n) go(x + 2, n) go(x + 3, n) t = int(input()) for i in range(t): n = int(input()) count = 0 go(0, n) print(count) 이게 최선의 풀이는 아닙니다. 아래 글이 최적의 코드입니다. 백준 15988 파이썬 python : 1, 2, 3 더하기 3 @@황소처럼 우직하게@@ 갓바텀업 그가 있지 않았다면 자신감을 얻지 못했을 것이다. import sys input = sys.stdin.readline..
import sys input = sys.stdin.readline def go(sum, n): if sum == n: return 1 if sum > n: return 0 return go(sum + 1, n) + go(sum + 2, n) + go(sum + 3, n) t = int(input()) for i in range(t): n = int(input()) print(go(0, n)) 재귀를 써서 풀었습니다. 1. 목표하는 값에 도달했으면 경우의 수 1 증가 2. 목표하는 값을 초과하면 버리기 3. 목표하는 값을 향해 달려가는데, 1을 증가하거나 2를 증가시키거나 3을 증가시키거나 쉽죠?