잡동사니#2. Array.prototype.find()

깡통·2024년 2월 13일
0

Array.prototype.find() 메서드는 조건을 만족하는 첫 번째 요소의 값을 반환하고, 만약 조건을 만족하는 요소가 없으면 undefined를 반환합니다. 따라서 find() 메서드를 사용하여 특정 조건을 만족하는 요소를 찾을 수는 있지만, 해당 요소가 배열에 존재하는지 여부를 확인할 수는 없습니다.
따라서 answer.find(numbers[i] + numbers[j] === undefined) 코드는 의도한 대로 작동하지 않습니다. 이 코드는 numbers[i] + numbers[j]가 undefined인 요소를 찾으려는 것으로 보이지만, 실제로는 find() 메서드에 전달된 함수가 true 또는 false를 반환하는 것을 찾으려고 합니다. 이것은 원하는 동작이 아니므로 적절한 검사를 하지 못하는 것입니다.
그러나 Array.prototype.includes() 메서드는 배열에 특정 요소가 포함되어 있는지를 확인할 수 있습니다. 따라서 중복을 확인하기 위해 includes() 메서드를 사용하는 것이 더 적절합니다.

  • 수정
function solution(numbers) {
  var answer = [];
  //1. numbers[i]와 number[j] (j>i)를 더함
  for (let i = 0; i < numbers.length; i++) {
    for (let j = i + 1; j < numbers.length; j++) { // 수정: j의 범위를 수정합니다.
      //2. 더한 수가 answer 배열에 존재하지 않으면, 배열에 추가함(있으면 무시)
      if (!answer.includes(numbers[i] + numbers[j])) { // 수정: find 메서드를 includes로 변경합니다.
        answer.push(numbers[i] + numbers[j]);
      }
    }
  }

  return answer;
}
  • 보너스

    얘는 answer 배열에서 a, b(a가 b보다 빠른 인덱스) 를 받아 둘이 빼서 더 작은 놈을 앞에 세우는 공식 - 오름차순이라-(-1 이하 이면 a가 앞, 1 이하면 b가 앞)
function solution(numbers) {
    const temp = []

    for (let i = 0; i < numbers.length; i++) {
        for (let j = i + 1; j < numbers.length; j++) {
            temp.push(numbers[i] + numbers[j])
        }
    }

    const answer = [...new Set(temp)]

    return answer.sort((a, b) => a - b)
}

Set을 쓰는 방법도 있네 ㄷㄷ

profile
코딩하러 온 사람입니다.

0개의 댓글