알고리즘: removeExtremes

Kyoorim LEE·2022년 6월 9일
0

알고리즘TIL

목록 보기
1/40

문제

문자열을 요소로 갖는 배열을 입력받아 가장 짧은 문자열과 가장 긴 문자열을 제거한 배열을 리턴해야 합니다.

입력

인자 1 : arr

  • string 타입을 요소로 갖는 배열
  • arr[i].length는 20 이하

출력

배열을 리턴해야 합니다.

주의사항

가장 짧은 문자열의 길이와 가장 긴 문자열의 길이가 같은 경우는 없습니다.
가장 짧은 문자열 또는 가장 긴 문자열이 다수일 경우, 나중에 위치한 문자열을 제거합니다.

입출력 예시

let output = removeExtremes(['a', 'b', 'c', 'def']);
console.log(output); // --> ['a', 'b']
output = removeExtremes(['where', 'is', 'the', 'longest', 'word']);
console.log(output); // --> ['where', 'the', 'word',]

풀이

접근방법

  • shortest 길이를 20으로 할당, longest 길이를 0으로 할당한 후
  • for 문을 돌려 각각 더 짧은 값, 더 큰 값을 새로 할당함
  • shortestIdx, longestIdx를 선언하여 배열의 인덱스값 구하기
  • 각각 최소값과 최대값을 알아낸 후,
  • .push()를 이용하여 새로운 배열 만들기
function removeExtremes(arr) {
  let shortest = 20; // 비교해서 더 짧은 요소 길이를 shortest에 넣어주기
  let longest = 0; // 비교해서 더 긴 요소 길이를 longest에 넣어주기
  let shortestIdx = 0;
  let longestIdx = 0;
  let result = [];
  for (let i = 0; i < arr.length; i++) {
    if(arr[i].length <= shortest) {
      shortest = arr[i].length;
      shortestIdx = i;
    } 
    if (arr[i].length >= longest) {
      longest = arr[i].length;
      longestIdx = i;
    }
  }
  for (let i = 0; i < arr.length; i++) {
    if (i !== shortestIdx && i !== longestIdx) {
      result.push(arr[i]);
    }
  }
  return result;
}

한 줄평

실패한 접근방법 1

.sort()함수로 요소길이 기준으로 배열을 정렬하여 arr[0]과 arr[arr.length]를 잘라내고 .slice()로 리턴

실패한 이유

최소/최대 길이를 가진 요소가 여러개일 수 있기 떄문에 arr[0]과 arr[arr.length]로 접근할 수가 없음

  • 결국 레퍼런스를 참고하고 말아벌임
  • shortest를 처음에 20으로 할당해서 비교하면서 더 작은 값을 넣어주는 접근을 생각하지 못함
  • Idx 변수도 함께 선언하여 shortest/longest의 i를 넣어주는 방법을 생각하지 못함
profile
oneThing

0개의 댓글