rladyddns123   4년 전

10번에 int &result에서 int result로 바꿔줬더니 결과는 같은데 시간 초과가 뜨네요...

이유가 뭔지 궁금합니다.

kdr06006   4년 전

레퍼런스로 쓰면 메모리를 공유합니다

레퍼런스를 안 쓰고 result만 쓴다면 cache[stage][idx]와는 별개의 메모리 공간이 생기고 거기에 값을 집어넣기 때문에 15번 째 줄에서 cache[stage][idx]에 값이 안들어가고 result에 값이 들어가고 함수가 종료되면 그 값은 그냥 사라지는거죠

rladyddns123   4년 전

int 만큼의 메모리를 점유하고 복사 초기화하는 과정때문에 시간초과가 나는거군요...

역시 c++은 어렵네요;

kdr06006   4년 전

그 시간은 별로 안드는데 dp가 적용이 안돼서 시간초과가 납니다

cache에 값이 안들어가고 result에 들어가고말아서 dp는 다 -1로 될겁니다

kdr06006   4년 전

저도 자세하게는 모르고 추상적으로만 알아서 자세한 내용은 구글링하시거나 책을 참고하시는게 좋으실거에요!!

rladyddns123   4년 전

감사합니다. 다시 한 번 봐야겠네요!

seico75   4년 전

int& result = cache[stage][idx]; 

는 cache[stage][idx]라는 변수에 result 라는 별명을 붙여준거라고 생각히시면 될 것 같습니다.

즉, 두 개는 이름만 다르지 같은 변수라고 값도 같이 바뀌는 거죠.

int 를 버전과 int& 를 버전을 비교하자면..

int& 버전은 result 부분을 cache[stage][idx] 로 전부 치환하고 이해를 해보셔도 되고

아니면 int& result = cache... 를 int result = cache.... 로 바꾸고

return result; 를 cache[stage][idx] = result; reture result; 로 바꾸고 보셔도 됩니다.

그러면 차이는 cache 에 값을 바꾸냐 안바꾸냐이고..

안 바꾸면 11/12 줄이 소용없어져서 이미 계산된 연산을 건너뛰는 것(메모이제이션)을 못하게 됩니다.

rladyddns123   4년 전

답변 감사합니다!

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