프로그래머스, 가까운 수 Javascript

cptkuk91·2022년 12월 22일
1

Algorithm

목록 보기
120/161

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120890?language=javascript

코드

function solution(array, n) {
    let answer = 0;
    let tmp = 0;
    let min = 100; // 최소값
    
    const sortArray = array.sort();
    
    for(let i = 0; i < sortArray.length; i++){
    	tmp = ((sortArray[i] - n) < 0) ? -(sortArray[i] - n) : (sortArray[i] - n);
        if(tmp < min) {
        	min = tmp;
            answer = sortArray[i];
        }
    }
    
    return answer;
}

코드 풀이

우선 입출력 예시만 봤을 때 배열(array)가 오름차순이다. 하지만 채점을 누르는 순간 모든 문제가 실패로 나온다. 여기서 한 참 고생을 했다. 물론 검색의 힘을 빌려, 중요한 전제 오름차순이 아니라는 힌트를 얻었다.

따라서 배열(array)를 한 번 sort 하고 진행했습니다. 그 외 방법은 단순합니다. 오름차순 값을 하나씩 n값과 비교해서 차이값을 min값에 넣어줍니다.

ex) [3, 10, 28], 20

  1. tmp는 3 - 20으로 -17이기 때문에 -(3 - 17)로 14라는 값을 얻습니다.
    현재 tmp는 14입니다.

  2. 만약 tmp가 min 보다 작다면?
    14 < 100 이니까, min 값을 tmp 값으로 바꿔줍니다. 그럼 이제 min 값은 14가 됩니다.
    여기서 answer = 3이 됩니다. (sortArray[0])

  3. 그럼 다시 sortArray[1]인 10으로 진행하겠습니다.
    tmp는 10 - 20입니다. 결과가 -10 이기 때문에, -(10 - 20)결과는 +10입니다.
    현재 tmp는 10입니다.

  4. 만약 tmp가 min 보다 작다면? (현재 min는 위 2번 때문에 14 상태입니다.)
    10 < 14 따라서 min은 10으로 변경됩니다.
    answer = sortArray[1] 값인 10이 된 상태 입니다.

  5. 마지막으로 sortArray[2]인 28로 진행하겠습니다.
    tmp는 28 - 20입니다. 8이기 때문에, 28 - 20으로 진행하겠습니다. 그럼 tmp는 8인 상태입니다.

  6. 현재 min은 4번 때문에 10인 상태입니다.
    8 < 10 조건에 만족하기 때문에 min은 8로 바뀌고, 원하는 결과값 28을 찾아낼 수 있습니다.
    (20에서 가장운 수)

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글