자료구조 및 알고리즘/JavaScript Practice

JS Practice) 프로그래머스 : 가까운 수

Ryomi 2023. 3. 14. 09:08
728x90
반응형

 

 

가까운 수

문제설명 :

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

 

제한 사항

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

 

입출력 예

array n result
[3, 10, 28] 20 28
[10, 11, 12] 13 12

 

첫번째 접근

: Math.abs()와 Math.min()을 사용해 n과 가장 가까운 수의 절대값 차를 구할 수 있다.

절대값의 차를 이용해 배열의 해당 요소를 반환하면 된다.

function solution(array, n) {
    let abs = array.map(el => Math.abs(el - n))
    let minNum = Math.min(...abs);
    let answer = []
    for(let i=0; i<abs.length; i++){
        if(minNum === abs[i]){
            answer.push(array[i])
        }
    }
    return Math.min(...answer)
}

 

두번째 접근

: 반복문을 돌리는 대신, map을 사용하면 코드가 간결해질 수 있을 것 같다.

function solution(array, n) {
    let abs = array.map(el => Math.abs(el - n))
    let minNum = Math.min(...abs);
    let answer = []
    abs.map((el, idx) => {
        if(el === minNum) answer.push(array[idx])
    })
    return Math.min(...answer)
}

 

 

solution

function solution(array, n) {
    return array.reduce((a,c)=> Math.abs(a-n) < Math.abs(c-n) ? a : Math.abs(a-n) === Math.abs(c-n) ? Math.min(a, c) : c);
}

 

728x90
반응형