joqjoq966   3년 전


혹시 틀린 부분이나 예외 케이스 찾아주실 분 계실까요...?

알고리즘은 수 전체를 정렬하고 제일 작은 음수(index : i) 2개끼리 곱해서 sum에 더하고, 제일 큰 양수끼리(index : j) 2개씩 곱해서 sum에 더하면서 i와 j가 같아질 때까지 처리하는 것입니다. 

0,1,-1등이 남았을 때의 경우까지 고려한 것 같은데 틀렸네요!

조언주시면 감사하겠습니다.

bupjae   3년 전

-1, 0, 1 처리가 불완전한 것 같습니다.

joqjoq966   3년 전

댓글 감사합니다!

제가 방금 실행해 보았는데 제시해주신 대로 입력하면 출력이 1로 제대로 나옵니다.

bupjae   3년 전

제가 사용하고 있는 컴파일러에서는 0 이 출력되었습니다.

https://tio.run/##bZLNa4MwGMbv...

joqjoq966   3년 전

아 그래서 백준사이트에서 틀린것 같네요.

컴파일러마다 값이 다를 수 있어서요! 

어디가 잘못되었는지 찾아봐야겠네요

감사합니다!!

bupjae   3년 전

어떤 C/C++ 프로그램의 결과가 컴파일러마다 다르다는 건 그 프로그램이 undefined behavior 를 가지고 있을 가능성이 매우 큽니다.

   

이 프로그램을 좀 더 자세히 분석해 봤는데

23~27번째 반복문에서 j의 범위가 줄어들지 않았다면 30번째 줄의 arr[i+1] 은 배열의 범위를 벗어난 곳을 읽을 수 있습니다.

배열의 범위를 벗어나지 않도록 조치한 코드는 맞았습니다 를 받았습니다.

joqjoq966   3년 전

와.. 해결했습니다

 undefined behavior라는 개념을 몰랐는데 알려주셔서 정말 감사합니다.

좋은 하루 보내세요!! 다시 한 번 감사합니다 ㅎㅎ

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