티스토리 뷰
알고리즘 문제를 풀 때. 예를 들어, 제일 작은 수를 제거하는 과정에서 배열의 재정렬을 사용한다면 경계해볼 필요가 있다.
# 문제
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
# 입력 예
[4,3,2,1]
# 출력 예
[4,3,2]
# 입력 예2
[10]
# 출력 예2
[-1]
위 문제 풀이 과정에서 가장 작은 수를 구하기 위해 배열을 재정렬하는 방법이 제일 먼저 떠오를 것이다.
배열의 재정렬을 풀이로 하자면, arr를 sort로 내림차순으로 정렬한 후에 배열의 맨 뒤 요소를 제거하는 pop() 메소드로 제거한다. 그리고 남겨진 값을 반환하면 예상한 결과와 달리 테스트 과정이 통과되지 않는다.
이 경우, filter() 메소드를 사용해서 배열의 가장 작은 값과 같지 않은 값들을 가진 새로운 배열을 반환하는 식으로 해결할 수 있다.
function solution(arr) {
const removeMinNum = arr.filter(n => n !== Math.min(...arr));
return removeMinNum.length === 0 ? [-1] : removeMinNum;
}
즉, sort() 메소드를 사용하지 않고 가장 작은 수를 찾아서 제거해야 하는 문제이다. 그 과정에서 배열을 재배열하는 것을 경계해야 하는 이유가 발생하는 것이다.
배열을 sort() 메소드로 정렬하는 습관을 들이면 안되는 이유
대다수의 통계 자료는 배열의 형태로 되어 있다. 예를 들어, 12개월의 월 평균 기온의 배열이 있다고 가정한다면.
[2,7,11,15,22,24,28,25,19,10,4,3]
위와 같은 배열이 있을 때, 해당 배열에서 가장 작은 수를 찾으려고 내림차순으로 재배열을 하면 어떤 월의 평균 기온을 구하려고 한다면 어려움을 겪게 될 것이다. 이미 해당 배열은 규칙과 순서에 맞게 졍렬되어 있는 상태이기 때문이다. 다시 다른 기준으로 재정렬(sort)한다면 위의 데이터가 가진 의미가 사라지는 것과 같다.
참조 블로그
https://dev-robinkim-93.tistory.com/15
제일 작은 수 제거하기(배열의 재정렬을 경계해야 하는 이유)
# 문제 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이
dev-robinkim-93.tistory.com
'알고리즘 > Algorithm' 카테고리의 다른 글
[코딩테스트 대비 공부] 약수 구하기 (0) | 2022.09.14 |
---|---|
[프로그래머스 Level 2] 전화번호 목록 (0) | 2021.04.01 |
- Total
- Today
- Yesterday
- 포스텍애플디벨로퍼아카데미
- if(kakao)dev2022
- LottieFiles
- 깃허브 Merge
- 신입개발자가 준비해야 할 것들
- 고민한 부분
- 설명회느낌점
- Express
- 최종추가합격
- 개발자이력서꿀팁
- React
- 원티드 프리온보딩
- node
- Default Branch
- 원티드 프리온보딩 챌린지
- javascript
- 조코딩과함께
- 자바스크립트
- 프론트엔드 챌린지
- Singleton
- 포스텍애플아카데미
- #포스텍애플디벨로퍼아카데미
- 스프링
- PostechAppleDeveloperAcademy
- DB Error MongooseServerSelectionError
- Frontend
- 그룹인터뷰후기
- 개발 이력서 지원 팁
- 코딩테스트 대비
- 싱글톤
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |