MOD를 안 더해주면 음수가 될 수 있는데, C/C++의 나머지 연산은 음수에 적용하면 우리가 흔히 아는 나머지 연산과는 좀 다른 방식으로 작동합니다. 그래서 MOD를 더해 음이 아닌 정수가 보장되도록 해야 합니다.
15588번 - Stamp Painting
MOD를 안 더해주면 음수가 될 수 있는데, C/C++의 나머지 연산은 음수에 적용하면 우리가 흔히 아는 나머지 연산과는 좀 다른 방식으로 작동합니다. 그래서 MOD를 더해 음이 아닌 정수가 보장되도록 해야 합니다.
댓글을 작성하려면 로그인해야 합니다.
vegatrash 4년 전
이 문제가 정말정말 어려워서 결국 풀이보고 알고리즘은 다 이해하기는 했는데
코드에서 뭔가를 빼는 값에 MOD연산을 해줄 때 마다 빼기 전에 MOD할 값을 한 번 더해줘야 하는 이유를 잘 모르겠습니다....
이 더해주는것을 생략하면 자꾸 틀린 풀이라고 하는데 혹시 왜 더해주어야 하는지 아시는 분 계신가요?
아래는 http://www.usaco.org/current/data/sol_spainting_gold_jan18.html에도 나와있는 코드랑 거의 같은거긴 하지만 첨부합니다.
보시면 45번째 줄이랑 47번째 줄에서 나머지 연산하기전에 한 번 더해주는데
47번쨰 줄에서 보면 (ans + MOD - (s[N] - s[N - 1])) % MOD 에서 진하게 표시한것처럼 한 번 더해주는것을 생략하면 틀리더라고요...
아 물론 a mod b == (a + b) mod b인건 알기는 하지만 저기서 MOD를 안더해주면 틀리는 이유가 뭘까요