cocoon   3년 전

맨 아랫줄에 

cout << sum[1].back() % MOD; 이부분을

cout << (sum[1].back() + MOD) % MOD; 으로 고쳐야 코드가 통과됩니다.


제가 생각하기로는 sum[1].back() 은 음수가 나오지 않기 때문에

sum[1].back() % MOD 랑 (sum[1].back() + MOD) % MOD 는 차이가 없다고 생각되는데 

제가 놓치고 있는게 있는지 궁금해서 질문 드립니다!

slah007   3년 전

채점할 때 sum[1].back>=0인지 assert()로 확인해 보세요. 제가 코드를 이해한건 아니지만 둘이 다른 경우는 음수인 경우밖에 없고 44번줄로 인해 음수가 나올수도 있을 것 같습니다.

sait2000   3년 전

...제 코드인가요 ???

44번 줄이 문제인 거 맞습니다. 저 부분합이 중간에 MOD값을 넘어가게 되면 논리적으로는 큰 거에서 작은 걸 빼는 거지만 계산한 값은 음수가 나올 수 있습니다. 그러면 47번 줄에서 다시 음수가 나올 수 있습니다.

가장 깔끔한 해결책은 44번 줄에다 + MOD % MOD를 하는 거라고 생각합니다.

cocoon   3년 전

감사합니다

문제가 어려워서 구글에 풀이법도 별로 없고해서 푸신분들 코드 보면서 가장 깔끔하신거같아서 참고했던것같습니다.

jh01love   8달 전

@sait2000

실례를 무릎쓰고 질문 하나만 드리겠습니다..

위 코드에서41~48번째 줄의 의미를 아무리 고민해봐도 잘 모르겠습니다.

저 과정을 수행하면 num과 sum이 나와 정답이 나온다는것은 이해하는데 왜 그런 아이디어가 쓰였는지 궁금합니다..

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