[프로그래머스] 가까운 수


문제 설명

정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ array의 길이 ≤ 100
  • 1 ≤ array의 원소 ≤ 100
  • 1 ≤ n ≤ 100
  • 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.

입출력 예

arraynresult
[3, 10, 28]2028
[10, 11, 12]1312

입출력 예 설명

입출력 예 #1

  • 3, 10, 28 중 20과 가장 가까운 수는 28입니다.

입출력 예 #2

  • 10, 11, 12 중 13과 가장 가까운 수는 12입니다.

※ 공지 - 2023년 3월 29일 테스트 케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.


나의 풀이

function solution(array, n) {
  var arr = [];
  var answer = [];

  array.forEach((item) => {
    arr.push(Math.abs(item - n));
  });

  var minNumber = Math.min(...arr);

  for (let idx = 0; idx < arr.length; idx++) {
    if (arr[idx] === minNumber) {
      answer.push(array[idx]);
    }
  }

  return Math.min(...answer);
}

나의 두번째 풀이(Code Refactoring)

function solution(array, n) {
  array.sort((a, b) => Math.abs(n - a) - Math.abs(n - b) || a - b);
  return array[0];
}

// 1. 배열을 n값을 뺀 순으로 정렬
// 2. 배열의 첫번째 값은 당연히 n과 가장 가까운수가 나온다

참고 할 만한 다른 사람의 코드

function solution(array, n) {
  array.sort((a, b) => a - b);
  let diff = Infinity;
  let ind = Infinity;
  for (let i in array) {
    let calc = Math.abs(n - array[i]);
    if (calc < diff) {
      diff = calc;
      ind = i;
    }
  }
  return array[ind];
}

// 메모
// Infinity 전역 속성은 무한대를 나타내는 숫자 값입니다.
// Infinity는 전역 객체의 속성입니다. 즉, 전역 범위의 변수입니다.

// Infinity(양의 무한대)는 다른 어떤 수보다 더 큽니다.