hungry_shark   3년 전

정렬 했을 때를 기준으로 경우의 수를 나열해보자면

- N = 1일때는 입력값 출력

- N > 1일때는 가장 큰 두 값이 

  case1 - 양수, 양수일때 

  case2 - 둘 중 하나가 0일 때

  case3 - 나머지 경우 (음수, 음수) or (음수, 양수)

이라고 볼 수 있습니다. case1에서 1이 있으면 곱하고 더했을 때 1만큼 손해볼 수 있어서 예외처리 넣었구요.

그렇게 제출했다가 틀렸길래 반례를 찾아보니 case1에서 -7 -1 0 1 2 처럼 0이 중간에 있을 때 예외처리를 빠뜨렸더라구요. 그래서 그것도 넣었는데 또 틀리네요 ㅠ 어디를 놓치는 걸까요..

henongj   3년 전

8 -7 -5 -1 0 1 3 5 7

을 집어넣으면 26이 나오네요

-7 * -5 = 35 , -1 * 0 = 0 , 1 , 3 , 5 * 7 = 35

35 + 0 + 1 + 3 + 35 = 74가 나와야합니다.

음수는 가장 작은 것부터 , 양수는 가장 큰 것부터 곱하고

남는 수를 0을 기준으로 무엇을 곱하고, 무엇을 더할지 판단해야 할 문제입니다

즉 N-1 과 N-2를 기준으로 for문을 다 따로 돌리고 예외처리를 하기보단

 for문이 돌아갈 때 판단해야 하는 문제니 코드를 갈아엎으셔야 합니다.

저는 양수와0 , 음수 배열을 따로 선언해서 for문을 돌렸습니다.

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