레퍼런스로 쓰면 메모리를 공유합니다
레퍼런스를 안 쓰고 result만 쓴다면 cache[stage][idx]와는 별개의 메모리 공간이 생기고 거기에 값을 집어넣기 때문에 15번 째 줄에서 cache[stage][idx]에 값이 안들어가고 result에 값이 들어가고 함수가 종료되면 그 값은 그냥 사라지는거죠
1932번 - 정수 삼각형
int 만큼의 메모리를 점유하고 복사 초기화하는 과정때문에 시간초과가 나는거군요...
역시 c++은 어렵네요;
감사합니다. 다시 한 번 봐야겠네요!
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년 전
10번에 int &result에서 int result로 바꿔줬더니 결과는 같은데 시간 초과가 뜨네요...
이유가 뭔지 궁금합니다.