1744번 - 수 묶기
혹시 틀린 부분이나 예외 케이스 찾아주실 분 계실까요...?
알고리즘은 수 전체를 정렬하고 제일 작은 음수(index : i) 2개끼리 곱해서 sum에 더하고, 제일 큰 양수끼리(index : j) 2개씩 곱해서 sum에 더하면서 i와 j가 같아질 때까지 처리하는 것입니다.
0,1,-1등이 남았을 때의 경우까지 고려한 것 같은데 틀렸네요!
조언주시면 감사하겠습니다.
-1, 0, 1 처리가 불완전한 것 같습니다.
댓글 감사합니다!
제가 방금 실행해 보았는데 제시해주신 대로 입력하면 출력이 1로 제대로 나옵니다.
제가 사용하고 있는 컴파일러에서는 0 이 출력되었습니다.
https://tio.run/##bZLNa4MwGMbv...
아 그래서 백준사이트에서 틀린것 같네요.
컴파일러마다 값이 다를 수 있어서요!
어디가 잘못되었는지 찾아봐야겠네요
감사합니다!!
어떤 C/C++ 프로그램의 결과가 컴파일러마다 다르다는 건 그 프로그램이 undefined behavior 를 가지고 있을 가능성이 매우 큽니다.
이 프로그램을 좀 더 자세히 분석해 봤는데
23~27번째 반복문에서 j의 범위가 줄어들지 않았다면 30번째 줄의 arr[i+1] 은 배열의 범위를 벗어난 곳을 읽을 수 있습니다.
배열의 범위를 벗어나지 않도록 조치한 코드는 맞았습니다 를 받았습니다.
와.. 해결했습니다
undefined behavior라는 개념을 몰랐는데 알려주셔서 정말 감사합니다.
좋은 하루 보내세요!! 다시 한 번 감사합니다 ㅎㅎ
댓글을 작성하려면 로그인해야 합니다.
joqjoq966 3년 전
혹시 틀린 부분이나 예외 케이스 찾아주실 분 계실까요...?
알고리즘은 수 전체를 정렬하고 제일 작은 음수(index : i) 2개끼리 곱해서 sum에 더하고, 제일 큰 양수끼리(index : j) 2개씩 곱해서 sum에 더하면서 i와 j가 같아질 때까지 처리하는 것입니다.
0,1,-1등이 남았을 때의 경우까지 고려한 것 같은데 틀렸네요!
조언주시면 감사하겠습니다.