kangsy763   4년 전

무엇이 문제인걸까요? 테스트 케이스는 잘 나옵니다

nahwasa   4년 전

long long 임에도 오버플로우가 납니다.

+보다 % 연산자가 먼저 불립니다.

kangsy763   4년 전

답변이 이해가 잘 안됩니다... ㅜ

nahwasa   4년 전

sum += dp[n][i]% 1000000000;

요건 sum = sum + dp[n][i]% 1000000000;

이렇게 작동합니다.

즉   dp[n][i]% 1000000000; 이후에 sum에 더해지게되서, sum은 계속해서 증가하게 됩니다.

그래서 long long의 범위를 넘어가게되서 오버플로우가 나게됩니다.

결론적으로 예를들어 입력으로 100을 넣으시면

-276563184

이런 값이 뜨게됩니다.

sum += dp[n][i];
sum %= 1000000000;
혹은 
sum = (sum + dp[n][i])  % 1000000000;
와 같이 하셔야 합니다.

kangsy763   4년 전

아!!!!!!!! 마지막에 sum에 하는 것은 저래서 의미가 없는거군요 정말 감사합니다!!

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