https://programmers.co.kr/learn/courses/30/lessons/12935
문제
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한 사항
- arr은 길이 1 이상인 배열입니다.
- 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
결괏값 예시
arr | return |
[4,3,2,1] | [4,3,2] |
[10] | [-1] |
기본 제공 틀
function solution(arr) {
var answer = [];
return answer;
}
풀이 [JavaScript]
우선, 길이가 1인 배열인 경우 else문에 따로 빼서 [-1]을 반환하도록 지정해주었다.
그 외의 길이가 1이상인 배열의 경우에는 sort로 정렬을 해서 가장 작은 수를 찾아내어 그 값을 직접 제거해주는 방식으로 로직을 짜야겠다고 생각했다.
그래서 가장 간단한 방법인 arr.sort()를 썼더니, 기존의 arr배열의 순서자체를 바꿔버린다는 것을 알 수 있었다.
그래서 tmp에 filter함수를 사용하여 arr값을 복사한 뒤, 복사한 tmp배열을 올림차순(default)로 정렬하여 가장 첫번째 값인 인덱스 0의 값을 찾아 tmpSorted에 넣어주었다.
그 다음에 filter함수를 다시 사용하여 tmpSorted, 즉, 가장 작은 값이 아닌 값만을 반환하여 filtered에 저장해서 return하도록 해주었다.
이 문제를 풀면서 새로 알 수 있었던 사실은 sort함수의 성질이다.
첫번째는 sort는 원래 기존의 배열의 순서를 바꿔버린다는 것이다.
두번째로는 아무생각없이 arr.sort()를 사용하게 되면 문자열 정렬이 되어버려서, 아래와 같이 4, 10, 30, 200 순으로 정렬이 되는 것이 아닌 앞자리 수 순서대로 10, 200, 30, 4 로 정렬이 되는 것을 알 수 있다.
이러한 문제를 방지하려면 숫자 정렬을 사용해야하는데, 그 방법이 바로 sort( ( a, b ) => a - b) 와 같이 쓰는 것이다.
내림차순으로 정렬하려면 sort( ( a, b ) => b - a) 와 같이 사용하면 된다.
function solution(arr) {
if(arr.length !== 1){
var tmp = arr.filter((t) => t);
var tmpSorted = tmp.sort((a, b) => a - b)[0];
var filtered = arr.filter((t) => t !== tmpSorted);
return filtered;
}else{
return [-1];
}
}
채점 결과 [JavaScript]
'알고리즘 스터디 > 프로그래머스 스킬체크 레벨 1(끝)' 카테고리의 다른 글
[프로그래머스 스킬체크 레벨 1] x만큼 간격이 있는 n개의 숫자 문제 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.13 |
---|---|
[프로그래머스 스킬체크 레벨 1] 수박수박수박수박수박수? 문제 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.13 |
[프로그래머스 스킬체크 레벨 1] 짝수와 홀수 문제 풀이 및 설명 - 자바스크립트[JAVASCRIPT] (0) | 2021.07.12 |
[프로그래머스 스킬체크 레벨 1] 직사각형 별찍기 문제 풀이 및 설명 - 자바스크립트[JAVASCRIPT] (0) | 2021.07.12 |
[프로그래머스 스킬체크 레벨 1] 가운데 글자 가져오기 문제 풀이 및 설명 - 자바스크립트[JAVASCRIPT] (0) | 2021.07.12 |
댓글