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

재오·2023년 3월 24일
2

코딩테스트

목록 보기
14/46
post-thumbnail

🗒️ 문제

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

⚠ 제한사항

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

📝 문제 해설

우선 생각할 점은 n과 배열의 원소의 차가 가장 작은 것을 골라야 하는데 그 차가 음수라고 해서 더 작은 값이 되는 것은 아니다. 단순히 차가 작은 것이 아니라 절댓값이 작아야 한다는 것이다. 하지만 더 어려운 점은 절댓값이 같은 수 중에서는 더 작은 수를 return한다는 점이다.
정리하자면

  • n과 원소의 차를 새로운 배열의 정의한다
  • 절댓값이 가장 작은 수를 찾는다.
  • 절댓값이 가장 작은 수의 원래 원소값을 새로운 배열에 또 저장한다.
  • 그 중에서 가장 작은 값을 반환한다.

💡 필요 문법

forEach()

화살표 함수를 이용한 for문과 비슷한 코드라고 생각하자.

Math.min()

가장 작은 값을 반환한다.

Math.abs()

절댓값을 계산해준다.

... (spread operator)

기존 배열이나 객체의 전체 또는 일부를 다른 배열이나 객체로 빠르게 복사할 수 있다.

💻 코드

function solution(array, n){
    let arr = [];
    array.forEach((item) => arr.push(Math.abs(item - n)));
    const min = Math.min(...arr);
    let newArr = [];
    for(let i=0; i<arr.length; i++){
        if(arr[i] === min){
            newArr.push(array[i]);
        }
    }
    return Math.min(...newArr);
}
profile
블로그 이전했습니다

2개의 댓글

comment-user-thumbnail
2023년 3월 24일

좋은 풀이 감사합니다 ~

1개의 답글