일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- react-native-image-picker
- react-native
- 제네릭타입
- craco
- react-hook-form
- Typescript
- 모던자바스크립트
- react-native-camera-roll
- 배열
- 코드숨
- 파스에러
- slice
- React
- Android
- ios
- react-native-vision-camera
- js
- javascript
- Flipper
- 자료구조와알고리즘
- reactnative
- 프로그래머스
- 리액트
- 리액트쿼리
- sort( )
- 크라코
- 타입스크립트
- 자바스크립트
- 리액트네이티브
- 유니온타입
- Today
- Total
KassyLog
제일 작은 수 제거하기 본문
알고리즘 문제를 풀다보니 문제 해결에 어려움을 겪었던 문제가 있어서 따로 정리해보려한다.
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
출력 예시
arr | return |
[4,3,2,1] | [4,3,2] |
[10] | [-1] |
before
아래의 코드는 테스트 코드는 통과하고 유효성 검사에서 모두 실패한 코드이다.
function solution(arr) {
var answer = [];
if (arr.length == 1) {
answer.push(-1)
} else {
answer = arr.sort((a,b)=>b-a).slice(0, arr.length - 1);
}
return answer;
}
내가 생각한 방향은
1. 배열의 길이가 1일 경우는 가장 작은 수가 그 1개이기에 -1을 도출하기로 하고
2. 내림차순으로 배열을 정렬한 다음 가장 마지막에 있는 원소를 지우고 도출하는 것이었다.
하지만 배열의 순서 자체가 의미있는 데이터일 수 있기 때문에 섣불리 sorting을 하는 습관을 가지면 안된다라는 검색 결과가 있었고, 코드가 작동해도 효율성이 떨어지면 탈락되는 경우도 있어서 실용성을 생각하고 sort를 사용하지 않는 코드를 작성했다.
after
function solution(arr) {
arr.splice(arr.indexOf(Math.min(...arr)), 1);
return arr.length ? arr : [-1];
}
indexOf와 Math.min을 활용하여 가장 작은 수의 인덱스를 찾아내서 splice로 제거해주는 방법을 사용했으며, 남아있는 원소값이 없다면 (즉, before의 if문 같은) [-1]을 return 하게끔 코드를 작성했다.
*오늘 사용한 메소드 알아보기
indexOf()
str.indexOf(searchValue[, fromIndex])
찾으려는 문자열. 아무 값도 주어지지 않으면 문자열 "undefined"를 찾으려는 문자열로 사용
fromIndex (optional)문자열에서 찾기 시작하는 위치를 나타내는 인덱스 값
기본값은 0이며, 문자열 전체를 대상으로 찾게 됩니다. 만약 fromIndex 값이 음의 정수이면 전체 문자열을 찾게 된다. 만약 fromIndex >= str.length 이면, 검색하지 않고 바로 -1을 반환하고 searchValue가 공백 문자열이 아니라면, str.length를 반환
String.prototype.indexOf() - JavaScript | MDN
indexOf() 메서드는 호출한 String 객체에서 주어진 값과 일치하는 첫 번째 인덱스를 반환합니다. 일치하는 값이 없으면 -1을 반환합니다.
developer.mozilla.org
Math.min()
Math.min([value1[, value2[, ...]]])
주어진 숫자들 중 가장 작은 값.
만약 적어도 1개 이상의 인자값이 숫자형으로 변환이 불가능 한 경우 이 함수는 NaN 를 반환
Math.min() - JavaScript | MDN
Math.min() 함수는 주어진 숫자들 중 가장 작은 값을 반환합니다.
developer.mozilla.org
splice()
splice와 slice의 차이점
이 둘은 배열을 이어붙이거나 제거할 때 사용하는 메소드라는 공통점을 가지고 있지만 slice는 "조각"뜻의 명사이고 splice는 "이어붙이다"뜻의 동사인 것처럼 중요한 차이점을 가지고 있다. 1. splic
gagyeong.tistory.com
sort()
sort( ) : 오름차순, 내림차순 정렬하기
arr.sort([compareFunction]) compareFunction (optional) 정렬 순서를 정의하는 함수. 생략하면 배열은 각 요소의 문자열 변환에 따라 각 문자의 유니 코드 코드 포인트 값에 따라 정렬. 정렬한 배열은 복사본이
gagyeong.tistory.com
'algorithms' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 (1) | 2024.03.29 |
---|---|
시간복잡도란? (0) | 2023.02.20 |