가장 짧은 문자열과 가장 긴 문자열 제거, removeExtremes

2021. 8. 18. 23:22
반응형

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

주의사항 : 가장 짧은 문자열의 길이와 가장 긴 문자열의 길이가 같은 경우는 없습니다. 가장 짧은 문자열 또는 가장 긴 문자열이 다수일 경우, 나중에 위치한 문자열을 제거합니다. 배열 안의 문자열 최대길이는 20.

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
function removeExtremes(arr) {
  // 가장 짧은 길이를 찾아서 그것의 인덱스 값을 찾는다
  //인덱스 값을 찾아서 그것을 제외하고 하나씩 푸쉬한다.
  let shortestLth = 20// 가장 짧은 길이를 찾기위한 수
  let longestLth = 0// 가장 긴 길이를 찾기위한 수
  let shortestIdx; // 가장 짧은 길이문자열의 인덱스값을 저장해줄 변수
  let longestIdx // 가장 긴 길이문자열의 인덱스값을 저장해줄 변수
  for(let i = 0; i < arr.length; i++){
    if(shortestLth >= arr[i].length){ // shortestLth에 최대값을 넣어놓고 줄여나간다.
      shortestLth = arr[i].length// 만약 arr[i].length가 10이면 shortestLth가 10이 되서 다시 반복
      shortestIdx = i; // 끝까지 반복하다보면 shortestLth에는 가장 짧은 길이(수), shortestIdx에는 그 수에 해당하는 인덱스가 저장된다.
    }
    if(longestLth <= arr[i].length){ //짧은것 찾는것과 동일한 방법으로 긴 것을 찾는다.
      longestLth = arr[i].length;
      longestIdx = i;
    }
  }
  let result = []; //그리고 빈 배열을 하나 만들어서
  for(let i = 0; i < arr.length; i++){
    if(i !== shortestIdx && i !== longestIdx){ //아까 찾은 문자열의 인덱스 값만 제외하고 result 배열에 넣어준다.
      result.push(arr[i]);
    }
  }
  return result; //끝
}
cs

이 문제는 많이 헤맸었던 문제이다. 맨 위 주석을 보면 내가 처음에 어떻게 풀어나갈지 생각했던 기록이다. 근데 막상 코드를 짜보니까 어떻게 인덱스값을 찾아줘야하는지 감이 잘 안왔고, 짧은 길이, 긴 길이의 문자열을 찾을 수는 있는데 이걸 가지고 어떻게 해줘야할지 감이 오지 않았다. 근데 찾아야 할 값들을 변수로 선언해주고 하나씩 채워나가는 식으로 문제를 해결하니까 처음에 틀을 잡아놨던 것들이 정리가 됐다. 무언가를 찾아서 처리해야하는 문제가 있으면 변수를 만들어주고 생각해보는 것도 좋은 방법이 될것 같다.

반응형
LIST

BELATED ARTICLES

more