tmdwp54977   1년 전

해당 문제의 세 용액 값을 더하면 int 범위를 넘어갈 수 있으므로 값을 담는 자료형을 long long으로 선언했습니다.

그리고 세 값을 더해서 abs 함수에 넣은 후 minProperty라는 값과 비교하여 풀고자 했는데,

5
999999999 1000000000 1000000000 1000000000 1000000000 예제에서 abs(arr[i] + arr[j] + arr[k])을 출력해보니

세 값을 더했을 때 2999999999 같은 의도한 수가 나오는 것이 아닌 다른 수가 나오는 이유를 모르겠습니다.

abs 함수를 쓰지 않고 sum이라는 변수에 우선 arr[i] + arr[j] + arr[k]를 저장하고 0보다 작으면 -1을 곱하는 방식으로 바꿔서 맞긴 했는데 어떤 부분이 문제였던걸까요?

pill27211   1년 전

c++의 std::abs()는 템플릿화 돼있어서 작성하신데로 할 경우 long long으로 추론 돼 정상적으로 의도하신 값이 출력될 테지만, 아마 std::abs()가 아닌 stdlib.h에 있는 반환형이 int인 abs()가 사용된 것 같습니다. using namespace std; 구문이 있거나 abs앞에 std::를 명시해 주시면 의도하신데로 동작할 것 같아요.

tmdwp54977   1년 전

말씀하신대로 std::를 붙여주고 돌리니 통과했어요. 함수 하나를 쓸 때도 고려해야 할 부분이 꽤 많네요 감사합니다!

djm03178   1년 전

솔직히 문제 풀 때는 그냥 using namespace std; 하는 게 편합니다.

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