목록9095 (2)
Be a developer
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dKChN3/btqtYZfs6nl/uzq3eXvj00YXpmsh2l5Kbk/img.png)
이전에 for문을 통해서 같은 문제를 풀었다. for문은 재귀로 바꿀 수 있기 때문에 재귀로도 풀 수 있다. for문은 10개를 만들어야 했지만, 재귀는 많은 코드가 필요없으므로 조금 더 간단하게 풀 수 있다. 재귀는 1.불가능한 경우 2.정답을 찾은 경우 3.다음 경우를 호출하는 경우 와 같은 3가지 경우로 나누어 풀어야 한다. 1,2,3을 선택할 수 있으므로 시간 복잡도는 O(3^n)이다. 자세한 설명은 아래 코드의 주석으로.. 123456789101112131415161718192021222324252627282930#include using namespace std; int ans;int n;void solve(int sum) { //1, 2, 3 중에 더하는 거라서 n을 넘어갈 수도 있음. 그 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cEXpVf/btqtUBR5n79/LxvnNESqfmOjj6lknGJZO0/img.png)
모든 방법의 수를 구하는 것이기 때문에 브루트포스로 푼다. 1,2,3 3가지 경우가 10번 가능하기 때문에 최대 3^10의 시간복잡도이다. 하지만 1을 10자리로 했을 때 최대의 경우의 수가 생기므로 3^10보다는 작을 것이다. 3^10도 1초의 제한시간 안에 가능하다. for문으로 풀려면 10개의 for문을 작성해야한다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162#include int main() { int t; scanf("%d",&t); while (t--) { int ans = 0; int n; scanf("%d",&n); for (i..