[코딩테스트 풀기] 제일 작은 수 제거하기

지원·2022년 7월 27일
0
post-thumbnail

1. 처음 생각한 방식

  1. arr를 오름차순으로 정렬한다.
  2. arr의 첫번째 인덱스 값을 알아낸다.
  3. 새로운 배열을 만드는데, 기존 arr에서 2의 값을 뺀
  4. 배열의 길이가 1보다 크지 않으면 [-1]을 반환

2. 잘 안되서 다시 생각한 방식

  1. arr를 오름차순으로 정리한다.
  2. 오름차순으로 정리된 배열 2의 첫번째 인덱스 값을 알아낸다.(제일 작은수)
  3. 배열 2의 첫번째 인덱스 값과 같은 값을 가진 배열 1의 인덱스 번호를 알아낸다. (indexOf)
  4. arr.splice를 사용해서 배열 1에서 해당 값을 삭제한다
  5. 배열의 길이가 1보다 크지 않으면 [-1] 반환
function solution(arr) {
  if (arr.length > 1) {
    const deleteArr = [...arr].sort();
    const index = arr.indexOf(deleteArr[0]);
    arr.splice(index, 1);
    return arr;
  } else if ((arr.length = 1)) {
    return [-1];
  }
}

근데 테스트 2개는 통과했는데, 제출 후 채점하니 3개 정확성 부족
(?) 뭐가문젤까??

(2022/07/27 update)
이것도 마찬가지로 2자리 수가 넘거나, 음수일 때 sort를 하면 문제가 생긴다
sort를 정확히 오름차순으로 배열하기 위해서는 () 안에 비교함수를 넣어줘야함

const arr = [-10, -23, -34, -1, -2]
arr.sort(); // 결과 [-1, -10, -2, -23, -34]

비교함수를 넣지 않으면 아주 엉망진창이됨!

  1. 오름차순으로 하고 싶으면
	arr.sort((a,b) => a-b)
  1. 내림차순으로 하고 싶으면
	arr.sort((a,b) => b-a)

그래서 sort함수만 살짝 수정해서 해결 완료~!

function solution(arr) {
  if (arr.length > 1) {
    const deleteArr = [...arr].sort((a, b) => {
      return a - b;
    });
    const index = arr.indexOf(deleteArr[0]);
    arr.splice(index, 1);
    return arr;
  } else if ((arr.length = 1)) {
    return [-1];
  }
}
profile
안녕하세요 지원입니다.

0개의 댓글