📕 문제 설명
정수 배열 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 |
📚 입출력 예 설명
입출력 예 #1
- 3, 10, 28 중 20과 가장 가까운 수는 28입니다.
입출력 예 #2
- 10, 11, 12 중 13과 가장 가까운 수는 12입니다.
😊 나의 답변
[1차 시도]
function solution(array, n) {
array.push(n); //n 삽입
array.sort((a, b) => a - b); // 오름차순 정렬
const idx = array.indexOf(n); // n의 인덱스 위치
const before = array[idx+1] - array[idx-1] // n 이전 요소
const after = array[idx] - array[idx-1] // n 다음 요소
// 다음 요소가 없으면 이전 요소 반환
if(array[idx+1] === undefined) return array[idx-1];
return before <= after ? array[idx-1] : array[idx+1];
}
질문하기에 있는 반례를 테스트케이스에 다 추가해서 돌려봐도, 테스트는 모두 통과됐으나 55.6 / 100.0 으로 통과되지 않았다 😢
[2차 시도]
function solution(array, n) {
array.push(n); // n을 배열에 삽입
array.sort((a, b) => a - b); // 오름차순 정렬
const idx = array.indexOf(n); // n의 인덱스
// 앞에 요소가 없을 경우
if(array[idx-1] === undefined) return array[idx+1]
// 뒤에 요소가 없을 경우
else if(array[idx+1] === undefined) return array[idx-1]
// 앞, 뒤 요소 둘 다 있을 경우
else {
const before = array[idx] - array[idx-1];
const after = array[idx+1] - array[idx];
// 더 가까운 요소 출력
return before <= after ? array[idx-1] : array[idx+1];
}
}
1차 시도에서 앞, 뒤 요소가 없는 경우에 실패하는 것 같아 if문을 추가하여 다시 풀어보았다.
성공 ⭐
하지만 제출하고 나서 다른 사람들의 답변을 보니... 더 간결하게 풀 수 있을 것 같았다. 🤦♀️
참고하여 다시 풀이해봤다.
[3차 시도]
function solution(array, n) {
array.sort((a, b) => a - b);
const arr = array.map((v) => Math.abs(v - n));
const value = Math.min(...arr);
const index = arr.indexOf(value);
return array[index];
}
1. 배열 array를 정렬
2. arr : 배열을 순회하며 요소에서 n을 뺀 절대값으로 구성된 배열
3. value : arr에서 가장 작은 요소 (가장 작은 요소 = 가장 가까운 요소)
4. index : arr에서 가장 작은 요소의 인덱스 값
5. array 배열의 index 위치에 있는 요소의 값 return
Math.abs()
를 활용해 풀 수 있는 걸 놓쳤다.
더 공부해야지
728x90
반응형
'프로그래머스 > Lv. 0 코딩테스트 입문' 카테고리의 다른 글
[프로그래머스] Lv.0 삼각형의 완성조건 (1) / JS (0) | 2023.08.14 |
---|---|
[프로그래머스] Lv.0 369게임 / JS (0) | 2023.08.14 |
[프로그래머스] Lv.0 암호 해독 / JS (0) | 2023.08.11 |
[프로그래머스] Lv.0 대문자와 소문자 / JS (0) | 2023.08.11 |
[프로그래머스] Lv.0 인덱스 바꾸기 / JS (0) | 2023.08.11 |