lsmmay322   3년 전

결과물을 10007로 나눈 나머지 몫을 구하라는데, 궁금한 부분이 있습니다.

for (int i = 0; i <= 9; i++)
res += dp[n][i]; 

res % MOD;

for (int i = 0; i <= 9; i++)
res += dp[n][i] % MOD;

for문을 통해 다 더한 후 마지막에 나머지 연산한것과, 더하면서 나머지 연산을 한것이 왜 차이가 나나요..?

제가 순간 바보가 된거같아요..

다 더하고 나눈게 정답이에요

seico75   3년 전

다 더하고 MOD 하면 Overflow 가 생길 수 있습니다. 즉, res 의 범위를 벗어나면 답이 틀려질 것 같습니다.

lsmmay322   3년 전

오히려 다 더하고 MOD로 나눈 나머지가 정답이에요...

seico75   3년 전

https://www.acmicpc.net/source...

MOD하고 더해도  정답이 나오는데요...

seico75   3년 전

참고로.. 나머지 연산을 해도 마지막에 나머지 연산을 또 해야합니다.

나머지 연산을 한 결과를 더한 것이 MOD 보다 클 수 있습니다.

lsmmay322   3년 전

그러면 아래 코드처럼 두 경우가 다 답이라는건데, 저 두개가 같은것이 이해가 되지 않습니다.

seico75   3년 전

질문하신 것이 이것이 맞는지 모르겠습니다만, 

(a % M + b % M) == (a + b) % M 입니다.

당연히 a % M ==  a % M % M 이구요.

https://opentutorials.org/modu...

그나마 위에 것이 좀 쉽게 설명된 자료가 아닌가 하고..

조금만 생각해보면 저런 법칙들이 그럴 것 같다고 이해가 되실 것 같습니다.

lsmmay322   3년 전

감사합니다. 한번 공부해뵤겠습니다!

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