ysd1029   7년 전

시간 초과 관련하여 몇가지 궁금한 게 있어서 글올립니다!

우선 밑에 소스에서    int[] d = new int[100]; 부분을 static 으로 돌려서 결국 맞긴 했습니다.

질문할 것을 정리하면

1.  소스와 같이 fibonacci 메소드 안에서 배열을 선언하면 메서드가 호출될때마다 새로운 d라는 배열(이름은 같지만 완전 다른.. 동명이인 같은)을 만들면서 진행되는 것이므로 사실상 memoization이 되지 않는 것과 마찬가지라서 시간 초과가 나는 거 맞는지 확인차 궁금합니다.

2. 파생되어 궁금한 것이 메모이제이션이 안 되어서 시간초과가 난 거지, 단순히 선언을 계속해서 한 걸로 인해 시간 초과가 난건 아닌지 궁금합니다. 즉 선언하는 거 자체가 시간이 걸리는 것인지에 대한 질문입니다!

3. 11번째 줄에서 println(fibonacci(n))으로 바로 넣어도 시간복잡도엔 영향이 없는지 궁금합니다.

4. 결과적으로 보통 문제를 풀 때 static으로 선언하고 가는 경우가 많은지 궁금합니다. main안에서 주욱 돌리면 상관 없겠지만 다른 메서드를 사용해야 할 때...

sksdong1   7년 전

1. 함수내에서 배열을 생성해서 메모제이션이 안되고 return이 되는 순간 저장된 값이 다 사라져요.

2. 메모제이션이 안되서 그렇구요, 배열 없이 단순히 값만 가지고 재귀호출하는 것하고 별 다를게 없는 코드에요

3. 없어요

4. static 하시거나, 메인함수에서 생성해서 함수에 매개변수로 전달하시거나 하시면 되겠죠? 

저 같은 경우 아래처럼 main에서 별도로 뽑아내서 해용.

sksdong1   7년 전

코드는 당연히 다른 문제입니다. 아무거나 하나 가져왔어요

ysd1029   7년 전

네 이해됐습니다!! 감사합니다.

댓글을 작성하려면 로그인해야 합니다.