알고리즘
백준 9095 1,2,3 더하기
중국고대사
2019. 3. 27. 17:16
모든 방법의 수를 구하는 것이기 때문에 브루트포스로 푼다.
1,2,3 3가지 경우가 10번 가능하기 때문에 최대 3^10의 시간복잡도이다.
하지만 1을 10자리로 했을 때 최대의 경우의 수가 생기므로 3^10보다는 작을 것이다.
3^10도 1초의 제한시간 안에 가능하다.
for문으로 풀려면 10개의 for문을 작성해야한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #include <cstdio> int main() { int t; scanf("%d",&t); while (t--) { int ans = 0; int n; scanf("%d",&n); for (int l1=1; l1<=3; l1++) { if (l1 == n) { ans += 1; } for (int l2=1; l2<=3; l2++) { if (l1+l2 == n) { ans += 1; } for (int l3=1; l3<=3; l3++) { if (l1+l2+l3 == n) { ans += 1; } for (int l4=1; l4<=3; l4++) { if (l1+l2+l3+l4 == n) { ans += 1; } for (int l5=1; l5<=3; l5++) { if (l1+l2+l3+l4+l5 == n) { ans += 1; } for (int l6=1; l6<=3; l6++) { if (l1+l2+l3+l4+l5+l6 == n) { ans += 1; } for (int l7=1; l7<=3; l7++) { if (l1+l2+l3+l4+l5+l6+l7 == n) { ans += 1; } for (int l8=1; l8<=3; l8++) { if (l1+l2+l3+l4+l5+l6+l7+l8 == n) { ans += 1; } for (int l9=1; l9<=3; l9++) { if (l1+l2+l3+l4+l5+l6+l7+l8+l9 == n) { ans += 1; } for (int l0=1; l0<=3; l0++) { if (l1+l2+l3+l4+l5+l6+l7+l8+l9+l0 == n) { ans += 1; } } } } } } } } } } } printf("%d\n",ans); } return 0; } | cs |