프로그래머스 제일 작은 수 제거하기 알고리즘 문제.
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] 입니다.
입출력 예
코드 실행에서는 통과하나, 테스트 케이스에서 오류나는 경우
let arr = [10];
solution(arr);
function solution(arr) {
arr = arr.sort((a,b) => b - a);
arr.pop();
if (arr.length === 0) {
arr.push(-1)
return arr;
} else {
return arr;
}
}
찾아보니 sort() 메소드를 사용하면 테스트 케이스의 조건 때문에 실패가 난다고 한다. sort()를 이용하지 않고 다른 방법을 찾아야했다.
다른 방법을 이용해 풀어보기.
spread syntax : 배열의 엘리먼트 하나 하나 값을 훑는다. [1, 2, 3] 이 있다면 1, 2, 3 을 꺼내서 보여줌. 배열 외에도 반복할 수 있는 것들(문자열)은 다 꺼낼 수 있다.
Math.min() : ()안에 숫자를 넣으면 가장 작은 값을 알려준다.
indexOf() : ()안에 엘리먼트를 넣으면 index번호를 알려준다.
.splice() : ()안에 인덱스번호, 얼마나 자르고 싶은지, 추가하고 싶은 거 1, 추가하고 싶은 거 2.. 순서대로 넣으면 잘라주거나 추가해주기도 한다.
.splice() syntax
array.splice(index, howmany, item1, ....., itemX
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
// let arr = [4,3,2,1];
let arr = [10];
solution(arr);
function solution(arr) {
if (arr.length <= 1) return [-1];
let smallnum = Math.min(...arr);
let smallindex = arr.indexOf(smallnum);
arr.splice(smallindex, 1);
return arr;
}
arr element가 하나이거나 빈 배열이면 -1을 리턴해주어야한다. 미리 맨 윗 줄에서 이 경우의 조건을 검사해서 리턴해준다. 다음으로는 ... 라는 spread 문법을 사용해서 배열 안의 숫자들을 하나 하나씩 훑을 수 있게 한다. 그래서 그 훑은 숫자들 중에서 Math.min을 사용하여 가장 작은 숫자가 무엇인지 판별하여준다. 다음으로는 그 숫자의 index 번호를 구한다. 마지막으로 그 index번호의 엘리먼트를 제거해준다.
다른 사람들은 어떻게 풀었을까?
참고하면 좋은 글
spread syntax https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
Math.max() https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/max
Math.min() https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/min
array.indexOf() https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
arr.splice() https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
'Algorithm' 카테고리의 다른 글
[알고리즘] #14 나누어 떨어지는 숫자 배열 | 프로그래머스 (0) | 2022.01.20 |
---|---|
[알고리즘] #25 정수 제곱근 판별 | 프로그래머스 (0) | 2022.01.20 |
[알고리즘] #28 하샤드 수 | 프로그래머스 (0) | 2022.01.20 |
[알고리즘] #27 콜라츠 추측 | 프로그래머스 (0) | 2022.01.20 |
[알고리즘] #21 이상한 문자 만들기 | 프로그래머스 | 테스트 실패 원인 (공백) (0) | 2022.01.19 |