오늘 뭐했냐/기억하면 좋을 문제들

sort() 활용

스스로에게 2023. 6. 28. 22:40

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

 

  • 조건에서 확인하니 모두 양수이다 
  • 빼서 절대 값이 가장 작은 것만 구하면 될 것 같은데  
  • 가까운 수가 중복이면 더 작은 수 
function solution(array, n) {
    let result = 0
    for (i = 1; i < array.length; i++) {
        if (Math.abs(n - array[result]) > Math.abs(n - array[i])) {
            result = i
        } else if (Math.abs(n - array[result]) === Math.abs(n - array[i])) 
        { array[result] < array[i] ? result : result = i }}
        
    return array[result];
}

else if를 사용한 이유는 절댓값이 같은 경우에만 실행하려고 한 것이다. 만약에 else만 사용했다면 result인덱스의 절대값이 작은 경우에도 코드가 실행되었을 것이다. 문제 자체가 복잡하거나 많은 이해를 필요하는 문제는 아니었지만 다른 사람들의 답을 보니까 여러 방식으로 풀었는데 가장 깔끔한 답은 이거였다.

 

function solution(array, n) {
    array.sort((a, b) => Math.abs(n - a) - Math.abs(n - b) || a - b);

    return array[0];
    }

가장 가까운 수가 여려 개인 경우 더 작은 값을 리턴하라는 조건에 맞춰서 sort()를 잘 사용했다. 평소엔 a-b 혹은 b-a로만 사용을 했는데 이렇게 메서드가 어떻게 동작하는지 알고 그것을 활용할 수 있다면 더 다양한 방법으로 필요에 따라 사용할 수 있을 것 같았다. 

 

sort((a,b)=>a-b) 에서 콜백함수의 결과가 참이면 b를 앞으로 거짓이면 자리를 바꾸지 않는다. 위에선 ||연산자까지 깔끔하게 사용했다. 

'오늘 뭐했냐 > 기억하면 좋을 문제들' 카테고리의 다른 글

피보나치 수  (0) 2023.10.17
올바른 괄호  (0) 2023.10.17
스택을 사용하는 문제  (0) 2023.06.25
생각을 넓히자  (0) 2023.06.23
정규 표현식 연계  (0) 2023.06.21