-
[level1] - 제일 작은 수 제거하기programmers/level1 2020. 7. 14. 19:21
문제 설명 :
정수를 저장한 배열, arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를 들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 return하고, [10]이면 [-1]을 return합니다.
입력 : [4,3,2,1]
출력 : [4,3,2]
입력 : [10]
출력 : [-1]
접근 방법 :
배열에서 가장 작은 수를 제거한 배열을 반환하면 되기 때문에, 일단 배열을 내림차순으로 정렬하고 pop()을 통해 맨 뒤에 가장 작은 수를 없애버리면 해결될 거라 생각했다.
그래서 바로 로직을 짰다.
처음 로직은 이렇게 심플했다.
function solution(arr) { arr.sort((a, b) => b - a).pop(); return arr.length < 2 ? [-1] : arr; }
하지만 모든 테스트를 통과하지는 못했다. 좌절... 😥
왜 그런가 질문하기에 있는 질문들을 모두 참고해서 보았다.
그 결과, 기존 배열의 순서를 그대로 유지하면서 가장 작은 수만 빼내야 했던 것이었다.
예를 들어, [5, 1, 8, 7]에서 sort()로 정렬하면, [8, 7, 5, 1]로 내림 차순으로 정렬이 된다.
그러나, 이렇게 되면 기존 배열의 순서를 건드리게 된다.
이것이 아니라, [5, 1, 8, 7] 이 형식을 유지하면서 가장 작은 수 1을 뺀 [5, 8, 7]을 반환해야 하는 것이었다.
그래서 생각한 방법은 바로 배열을 복사하는 것이다.
배열을 복사해서 그 복사한 배열에서 가장 작은 수를 추출한 다음, 기존 배열에서 가장 작은 수를 slice()와 indexOf()를 통해 추출하면 모든 테스트 케이스가 통과가 되는 것을 확인할 수 있었다.
내가 짠 코드 :
function solution(arr) { let answer = [...arr]; const min = answer.sort((a, b) => b - a).pop(); arr.splice(arr.indexOf(min),1); return arr.length < 2 ? [-1] : arr; }
'programmers > level1' 카테고리의 다른 글
[level1] - x만큼 간격이 있는 n개의 숫자도움말 (0) 2020.07.19 [level1] 핸드폰 번호 가리기 (0) 2020.07.18 [level1] - 자연수 뒤집어 배열로 만들기 (0) 2020.07.04 [level1] 이상한 문자 만들기 (0) 2020.07.04 [level1] - 수박수박수박수박수박수? (0) 2020.06.29