저게 없으면 int 두 개를 곱한 순간에 이미 오버플로우가 나기 때문에, 그 결과를 result에 넣어봤자 의미 없는 수로 남습니다.
6549번 - 히스토그램에서 가장 큰 직사각형
result = arr[idx] * (right - left + 1); 라고만 쓰면 곱셈 연산을 int 연산으로 한 뒤 값을 long long 으로 바꿔서 result 에 저장합니다.
이 경우 int overflow 가 발생하면 overflow 때문에 잘못 계산된 값이 그대로 long long으로 바뀌어서 result 에 기록됩니다.
반면 result = (long long)arr[idx] * (long long)(right - left + 1); 라고 쓰면 먼저 long long 으로 바꾼 뒤에 곱셈을 합니다.
int 범위를 넘어서도 overflow 가 발생하지 않고, 문제에서 주어진 조건에 따르면 long long 의 범위를 넘어서는 데이터는 주어질 수 없으므로
항상 올바른 계산 결과가 result 에 기록됩니다.
댓글을 작성하려면 로그인해야 합니다.
sjnov11 5년 전
안녕하세요, 6549 문제를 푸는데 계속 오답이 나다가
4번째 줄에 arr[idx]와 right-left+1 에 long long으로 캐스팅을 해주니 통과가 되더군요.
그 이유가 무엇인지 혹시 알 수 있을까요?
감사합니다.