문제
정수를 저장한 배열 arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수, 배열이 빈 배열인 경우 배열에 -1을 채워 리턴하여라
내 코드 풀이 1
function solution(arr) {
var answer = [];
for(let i = 0; i < arr.length; i++) {
if(arr[i] < arr[i+1]) {
answer.push(arr[i+1]);
}else if(arr[i] > arr[i+1]) {
answer.push(arr[i]);
}
}
return answer.length ? answer : [-1];
}
- 좀 지저분한 코드긴 해도 ... 테스트 1,2번은 통과한 코드
- for문으로 사용하여 각 크기를 비교후 맞는 값을 리턴하였다
리팩토링 1
function solution(arr) {
const answer = [];
for (let i = 0; i < arr.length - 1; i++) {
answer.push(Math.max(arr[i], arr[i+1]));
}
return answer.length > 0 ? answer : [-1];
}
- 위의 코드를 좀 더 보기 좋게 리팩토링 한 것
- Math.max를 사용하여 큰 숫자를 push하게 한다

근데 여기서 문제가 생겼다. 테스트 1/2는 통과했는데 채점시에 모든 케이스가 실패...
문제에서 내가 놓친게 있나 다시 보는 중..
수정된 코드
function solution(arr) {
var min = Math.min(...arr);
var a = arr.filter(item => item !== min);
return a.length ? a : [-1];
}
- 배열에서 가장 작은 값을 찾은 후
- 필터를 사용하여 작은 값을 제거해 리턴하는 코드로 변경을 했다
위의 for문 코드는 배열을 순회하며 현재 요소와 다음 요소를 비교해 큰 값을 결과 배열에 추가하는 형식이었는데. 요소의 순서가 변경되는 거 같다.
그 외 코드
function solution(arr) {
arr.splice(arr.indexOf(Math.min(...arr)),1);
if(arr.length<1)return[-1];
return arr;
}
function solution(arr) {
if (arr.length > 1) {
var minNum = Math.min(...arr);
var idx = arr.indexOf(minNum);
arr.splice(idx, 1);
} else {
arr = [-1];
}
return arr;
}
'기초다지기 > JS 코딩테스트' 카테고리의 다른 글
javascript 두 정수 left, right 사이 정수들 약수 갯수와 덧셈 (0) | 2023.10.20 |
---|---|
javascript 주어진 길이 n에 따라 "수박" 패턴을 유지하는 문자열 생성하기 (0) | 2023.10.20 |
javascript 무작위 정수 배열 중에서 n으로 나누어 떨어지는 숫자의 배열 생성 (0) | 2023.10.18 |
javascript 배열 내 없는 숫자 더하기 (1) | 2023.10.18 |
javascript a,b 사이의 모든 정수의 합 (0) | 2023.10.05 |