[JS]_daily coding #12

seul·2022년 6월 9일
0

Algorithm

목록 보기
11/31

코플릿 데일리코딩 11번_ removeExtremes


🫥 수도코드

  1. 배열을 입력받아서 => 배열의 요소 중 가장 긴 문자열, 가장 짧은 문자열 제거한 배열 반환(길이가 같은 요소가 여러개 있다면 그 중 마지막 요소만 제거한다)
  2. min, max 변수를 선언해주고 각각 배열의 첫번째 요소(0번 인덱스) 담아준다.
  3. 1번 인덱스부터 배열 마지막 인덱스까지 반복하는 for문 생성
  4. i번 인덱스 요소(문자열)의 길이가 min문자열 길이보다 작거나 같은 경우에 min에 i번 인덱스 요소를 담아준다.
  5. i번 인덱스 요소(문자열)의 길이가 max문자열 길이보다 크거나 같은 경우에 max에 i번 인덱스 요소를 담아준다.
  6. 반복문을 빠져 나와서 filter메소드를 통해서 min과 max 요소를 제외한 요소를 반환한다.

😐 첫번째 코드

function removeExtremes(arr) {
  let min = arr[0];
  let max = arr[0];
  for( let i = 1; i < arr.length; i++) {
    if (arr[i].length <= min.length) {
      min = arr[i]
    } 
    if (arr[i].length >= max.length) {
      max = arr[i]
    }
  }
  return  arr.filter((el) => (el !== min) && (el !== max))
}

배열의 요소 중 가장 길이가 짧은 요소가 빈 문자열인 경우에는 중복될 경우 마지막 요소만을 지우는 것이 아니라 모든 빈 문자열을 삭제해서 테스트케이스를 통과하지 못했다.
필터 메소드가 min,max와 요소의 값을 통해서 비교하고 있기 때문에 빈문자열의 경우에는 마지막 요소만을 특정해서 제거하지 못하고 있었다. => 인덱스를 통해서 비교하는 식으로 수정할 필요가 있다.

🤗 두번째 코드

function removeExtremes(arr) {
  let min = arr[0];
  let max = arr[0];
  let minIdx = 0;
  let maxIdx = 0;
  for( let i = 1; i < arr.length; i++) {
    if (arr[i].length <= min.length) {
      min = arr[i];
      minIdx = i;
    } 
    if (arr[i].length >= max.length) {
      max = arr[i];
      maxIdx = i;
    }
  }
  return  arr.filter((el, idx) => (idx !== minIdx) && (idx !== maxIdx))
}

minIdx와 maxIdx를 추가로 선언해서 관리해주니 특정한 인덱스만을 제거하는 것이 가능해졌다.

profile
Connecting dots

0개의 댓글