f(arr[left] + arr[right] + arr[i])
여기서 int + int + int 라서 오버플로우가 나겠네요.
이게 문제인지는 잘 모르겠다만..
2473번 - 세 용액
인자가 long long이어도 int의 덧셈이 먼저 된 후에 long long으로 타입변환이 돼서 오버플로우는 여전히 일어날 것 같습니다.
음 이렇게 하시는 건 사실 아까와 별반 차이가 없을 것 같습니다.
이 경우에도 여전히 arr[left] + arr[right-1] + arr[i] 의 덧셈이 완료된 후에 long long으로 변환되기 때문입니다.
arr를 long long형으로 선언하시거나, (long long) arr[left] + arr[right-1] + arr[i]로 덧셈하기 전에 셋 중 하나의 타입을 바꿔주시면
계산을 할 때 정보의 손실이 없는 쪽으로 형변환을 하기 때문에 오버플로우가 없는 결과를 얻을 수 있을 것 같네요.
댓글을 작성하려면 로그인해야 합니다.
onjo0127 8년 전 3
초등부 용액 문제에 for문하나 더 씌워서 해 봤는데
40%대에서 틀리네요
정렬해놓고 절대값이 작아지는 쪽을 좁히며 최소값을 구하는 방식입니다.