강의로 돌아가기
김용민

이 코드의 반례를 알고 싶습니다.

function solution(arr) {
    let answer = [];
    let sortArray = arr.sort((a,b) => b-a);
    if (arr.length <= 1) {
        return [-1]
    } else {
        for (i=0; i<sortArray.length-1; i++){
            answer.push(sortArray[i])
        }
        return answer
    } 
}

실제로 테스트 케이스는 정상적으로 동작하고, 제가 생각한 반례는
입력값 > [3, 2, 1, 1, 1]
기댓값 > [3, 2]
이거라고 생각을 하는데, 이부분은 문제에서 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 이래서 불가능한게 아닌가요?
혹시 반례가 있으면 알려주시면 감사하겠습니다.

2 개의 답변
김수홍

자바스크립트는 모르지만..
해당 코드는 arr이 내림차순 정렬이 되어 있을 때만 정상적인 답변이 나올 것 같습니다.

입력값 > [1, 2, 3, 4]
기대값 > [2, 3, 4]

  • 김용민

    아마 어떤 배열이들어와도 내림차순 정렬을 위에서 해준 배열로 사용해서 그문제는 아닐 것 같네요 ㅠㅠ

    김용민―2023.05.16 13:00
  • 김용민

    제가 생각해본 반례은 [4,2,3,5]면 435가 나와야하는데543이 나와서 그런게아닐까 생각해보고있습니다… 문제조건이 명확하지않아서 테스크케이스도 다채롭지 않아서 까다롭네요 ㅠㅠ

    김용민―2023.05.16 13:02
  • 김수홍

    제가 애매하게 반례를 든 것 같아요 ㅎㅎ. 문제에서 요구하는 정답은 arr의 순서는 유지한 채로 최솟값만 제거된 배열입니다!

    김수홍―2023.05.16 14:09
glory4god

수홍님께서 말씀하신게 문제점이 맞고, 용민님께서 2번째 댓글로 달아주신 반례가 맞습니다.

let sortArray = arr.sort((a,b) => b-a);

이렇게 정렬을 하게되면 기존에 있던 배열의 순서를 기억못하기 때문에 답을 못구하겠네요.
정렬을 사용할꺼면 초기 인덱스 값도 기억을 하고 있어야하지 않을까 싶어요.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.