2022. 10. 13. 20:47ㆍ기록/Programmers
- 목차
문제 설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한 사항
- arr은 길이 1 이상인 배열입니다.
- 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
입출력 예
arrreturn
[4,3,2,1] | [4,3,2] |
[10] | [-1] |
나의 문제 풀이
function solution(arr) {
let answer = [];
let min = [...arr].sort((a, b) => a - b).shift();
answer = arr.filter(num => num !== min);
return answer.length ? answer : [-1];
}
- spread 연산자를 사용하여 주어진 배열을 복사한다.
- 복사한 배열의 요소들을 오름차순으로 정렬한다.
- 배열의 첫번째 요소를 꺼내어 변수에 저장한다.
- 주어진 배열의 요소들 중에서 방금 저장한 변수의 값과 동일하지 않은 값을 가진 요소들만으로 새로운 배열을 만든다.
- 배열의 길이가 0이면 -1이 담긴 배열을 리턴한다.
- 배열의 길이가 0이 아니면 새로 만든 배열을 리턴한다.
filter() 함수는 다른 사람의 풀이에서 종종 보았지만 이번 문제에서 처음 사용해 보았는데,
조건에 맞는 요소들만으로 새로운 배열을 만들 때에는
map() 함수보다 filter() 함수를 사용하는 것이 훨씬 간결한 것 같다.
다른 사람의 문제 풀이
function solution(arr) {
arr.splice(arr.indexOf(Math.min(...arr)) ,1);
if (arr.length < 1) return [-1];
return arr;
}
- Math.min() 을 사용하여 주어진 배열의 요소들 중에서 최소값을 찾아낸다.
- 주어진 배열의 요소들 중에서 최소값의 위치를 찾아낸다.
- 주어진 배열에서 최소값의 위치로부터 1개의 요소를 제거한다.
- 배열의 길이가 1보다 작으면 -1이 담긴 배열을 리턴한다.
- 배열의 길이가 1보다 작지 않으면 마지막 리턴문으로 주어진 배열을 리턴한다.
나의 풀이에서는 주어진 배열에서 최소값을 제외하여 새로운 배열을 만들어 리턴했지만
다른 풀이에서는 주어진 배열에서 최소값을 제거하여 그대로 리턴하였다.
같은 문제라도 사람마다 떠오르는 로직이 다양할 수 있다는 것과,
이렇게 다른 사람의 풀이를 보며 그 떠오르는 로직들을 하나씩 채워갈 수 있다는 것을 알게 되었다. 😺