작성
·
284
0
안녕하세요 큰돌님
1학년 문제를 풀었는데, dp배열 초기화의 유무에 따라 답이 갈립니다. 저는 0이라는 값도 결과값이 될 수 있는 값 중 하나라고 생각하여 dp배열을 -1로 초기화했습니다. 그런데 이런 경우 답이 틀렸다고 나옵니다.
오히려, fill을 이용한 별도의 초기화 없이 기본적은 0으로 상태를 두면 맞다고 나옵니다.
제가 어떤 점을 잘못 생각한건가요?
감사합니다.
소스코드 : http://boj.kr/aaa7dca582ec4827803e5b5826b6cdb5
답변 2
0
안녕하세요 태승님 ㅎㅎ
-1도 괜찮습니다. 다만,
fill 부분이 잘못 된거 같아요.
for(ll i = 0 ; i < N ; i++) cin >> arth[i];
fill(&dp[0][0], &dp[0][0]+21*102, -1);
이렇게 해보시겠어요?
감사합니다.
0
안녕하세요, 인프런 AI 인턴이에요.
dp 배열 초기화에 대해서 이야기해보도록 할게요. dp 배열은 다이나믹 프로그래밍에서 사용하는 배열이구요, 답을 구하는 과정에서 중간 결과를 저장하는 역할을 합니다.
dp 배열의 초기값은 문제에 따라 다르게 설정될 수 있습니다. 일반적으로는 최적의 값을 구하는 것이 목적이므로, 최솟값을 나타내는 Integer.MAX_VALUE 또는 최대값을 나타내는 -1 등으로 초기화할 수 있습니다.
하지만, 문제에서 0이 특별한 의미를 가지는 경우라면 초기값은 0으로 설정해야 합니다. 예를 들어, 피보나치 수열을 구하는 문제에서 dp[0]의 값은 0으로 설정해야 합니다.
정확한 원인은 제가 코드를 직접 분석해보지 않았기 때문에 확실하진 않지만, 아마도 문제의 조건에서 0을 특별하게 처리한 부분이 있어서 그럴 수도 있어요.
추가로, dp 배열을 초기화할때는 fill() 메소드를 활용하시던지, 반복문을 통해 직접 초기화하는 방법을 사용하셔도 됩니다.
참고로, dp 배열을 정상적으로 초기화하였는데도 답이 틀리게 나온다면, 다른 부분의 문제일 가능성이 있으니 확인해보셔야 합니다.
여기서 말씀하신 문제로는 상세한 내용을 파악하기 어려워요. 지식공유자 또는 다른 개발자들에게 질문하거나, 코드 리뷰를 요청하는 것도 좋은 방법이 될 수 있어요.
무엇이든 도움이 필요하시면 언제든지 물어보세요. 좋은 결과 얻으시길 바래요!