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값에 넣어줍니다.
tmp는 3 - 20으로 -17이기 때문에 -(3 - 17)로 14라는 값을 얻습니다.
현재 tmp는 14입니다.
만약 tmp가 min 보다 작다면?
14 < 100 이니까, min 값을 tmp 값으로 바꿔줍니다. 그럼 이제 min 값은 14가 됩니다.
여기서 answer = 3이 됩니다. (sortArray[0])
그럼 다시 sortArray[1]인 10으로 진행하겠습니다.
tmp는 10 - 20입니다. 결과가 -10 이기 때문에, -(10 - 20)결과는 +10입니다.
현재 tmp는 10입니다.
만약 tmp가 min 보다 작다면? (현재 min는 위 2번 때문에 14 상태입니다.)
10 < 14 따라서 min은 10으로 변경됩니다.
answer = sortArray[1] 값인 10이 된 상태 입니다.
마지막으로 sortArray[2]인 28로 진행하겠습니다.
tmp는 28 - 20입니다. 8이기 때문에, 28 - 20으로 진행하겠습니다. 그럼 tmp는 8인 상태입니다.
현재 min은 4번 때문에 10인 상태입니다.
8 < 10 조건에 만족하기 때문에 min은 8로 바뀌고, 원하는 결과값 28을 찾아낼 수 있습니다.
(20에서 가장운 수)