해결된 질문
작성
·
36
0
안녕하세요 선생님 🙂
어려운 문제는 아니었던거 같지만 모르겠는 부분이 생겨서 질문 드립니다.
visual studio에서는 배열의 범위가 초과되었다는 에러가 계속 뜹니다. 선생님 코드와 다른 점이 없는지 여러 번 검증해보았지만 차이가 없어서 백준에 제출해봤는데요, 맞았다고 하더라구요..
arr의 크기를 18이 아닌 20으로 잡아도 동일한 에러가 잡힙니다. 컴파일러에서 왜 에러가 뜨는건지 모르겠습니다..
http://boj.kr/f91936720fc54768adb00def9dc32b35
메모이제이션 범위가 이해되지 않아 다른 숫자들로 넣어봤는데요, 0.0까지는 문제가 없더라구요. 메모이제이션 범위를 -0.5로 두신 이유가 궁금합니다.
답변 2
1
안녕하세요 유태님 ㅎㅎ
arr의 크기를 18이 아닌 20으로 잡아도 동일한 에러가 잡힙니다. 컴파일러에서 왜 에러가 뜨는건지 모르겠습니다..
-> 해당 코드 확인해봤는데요. 제 컴파일러에서는 에러가 뜨지 않습니다. 이부분은 저도 잘 모르겠습니다.. 다른 컴파일러를 사용해주세요.
참고로 다음의 코드는 문제가 있는 코드입니다. 18까지 잡았으면 17까지 참조되게 해야 합니다.
for (int j = i + i; j <= 18; j += i)
{
arr[j] = 0;
0.0까지는 문제가 없더라구요. 메모이제이션 범위를 -0.5로 두신 이유가 궁금합니다.
->
이 문제같은 경우 0.0이하인 수로 메모이제이션을 걸어도 됩니다.
double go(int idx, int x, int y){
if(idx == n) return isP[x] || isP[y] ? 1.0 : 0.0;
double &ret = dp[idx][x][y];
if(ret >= 0.0) return ret;
앞의 코드처럼 해도 됩니다.
-0.5는 그냥.. 0.0 이하인수중에서 하나 골라서 했습니다. ㅎㅎ
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다. 유태님
질문하신 내용과 관련하여 유사한 문제를 다룬 기존 질문들을 찾아보았습니다. array 범위 초과 에러와 메모이제이션 범위 설정에 관한 문제에 대해 아래의 링크들을 참고하시면 도움이 될 것 같습니다.
Visual Studio에서 배열의 범위 초과 에러가 발생하는 부분에 대해, 유사한 이슈를 겪은 다른 수강생들의 질문과 답변을 보실 수 있습니다.
메모이제이션 범위를 설정하는 이유와 관련된 설명들을 찾았습니다.
이 링크들을 통해 유사한 문제에 대한 해결책을 얻으실 수 있을 겁니다. 추가적으로, 메모이제이션의 범위를 설정할 때는 코드의 특성과 문제의 요구사항에 맞게 설정하는 것이 중요합니다. 필요한 범위 내에서 최적화해야 하며, 범위를 줄이거나 늘리면 성능 및 정확도에 영향을 미칠 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.