function solution(array, n) {
array.sort((a, b) => {
const diffA = Math.abs(n - a); // a와 n의 차이
const diffB = Math.abs(n - b); // b와 n의 차이
if (diffA === diffB) { // a와 b가 n과의 차이가 같은 경우
return a - b; // a와 b를 오름차순으로 정렬
}
return diffA - diffB; // 차이가 작은 순서대로 정렬
});
return array[0]; // 정렬된 배열에서 가장 작은 값을 반환
}
array = [14, 16, 18]
n = 17
console.log(solution(array, n)) // [16, 18, 14]
▶ a와 b는 array의 배열의 요소를 의미한다.
아래는 파이썬의 풀이 이다.
def solution(array, n):
array.sort(key = lambda x : (abs(x-n), x-n))
print(array)
answer = array[0]
return answer
▶ 정렬대상은 array의 요소인 x이며
▶ sort key 값에 2개 항목을 넣을 수 있다. → 첫번째 정렬, 두번째 정렬
▶ 첫번째 정렬방법은 abs(x-n) 의 오름차순이다.
▶ 두번째 정렬방법은 x-n의 오름차순이다. 이는 abs(x-n)이 같은 경우 작은 숫자를 좌측으로 배측하기 위함이다.
▶ n= 9 이고 array= [8, 10] 인 경우 abs(x-n)값이 동일하다.
그러나 x-n의 오름차순이므로
▶ 8의 경우 x-n 즉 8 - 9 = -1이고, 9의 경우 x-n = 10 - 9= +1이다.
▶ array에 8이 앞에 오고, 10이 뒤에 온다.
▶ 최종적으로 맨 앞에 array[0]을 추출하면 된다.
'프로그래머스(자바스크립트) > LV.0(자바스크립트)' 카테고리의 다른 글
진료순서 정하기 → 신박한 풀이 ★ ★ ★ (0) | 2023.03.01 |
---|---|
k의 개수 → number타입을 String타입으로 변환 (0) | 2023.03.01 |
2차원으로 만들기 → 배열자르기slice + for문 이용시 step 건너뛰기 (0) | 2023.03.01 |
A를 B로 만들기 → 돌릴 필요 없이 "정렬"해서 비교하기 (0) | 2023.03.01 |
중복된 문자제거 (0) | 2023.03.01 |