TIL 오늘 내가 헷갈린 문제.. (feat.sort())

김인태·2022년 6월 3일
0

문제는 무엇이였냐면?!

find_longest_word 함수를 만들어 주세요.
주어진 리스트안에 있는 단어중 가장 긴 단어를 찾을수 있도록 함수를 완성해주세요.
console.log(find_longest_word(["PHP", "Exercises", "Backend"]))
// --> "Exercises"

처음에 이문제를 읽고 어떻게 접근할까 고민했다.
뭔가 pop메소드를 써서 마지막으로 보낸 배열을 자르면 되겠다고 생각했고,
그렇다면 어떻게 배열의 길이가 큰 것을 판별할 것인가..? 라는 고민에 이르게 되었다. 그래서

function find_longest_word(arr) {
  // 아래 코드를 구현해주세요.
for(var i = 1; i <= arr.length; i++){
  if(arr[i] > arr[i-1]){
   arr.pop()
  }else{
    arr = arr[i-1];
  }
}
  return arr;

} 

처음에는 무작정 일단 이 말도 안되는 코드를 써 보았다...
당연히 될리가 없다 . 왜냐하면 i값이 1일 때를 보면 php와, exercise가 비교되는데 자세히보니 length도 쓰지않았다..
이런실수를 하다니.. 어쨋든 length를 썼다는 가정하에 exercise가 더크니까 else로 넘어가서 arr 배열이 exercise가 된다?
그리고 배열을 리턴한다? 말이 안되는 코드다..

그러다가 이것을 정렬해야겠다는 생각을했고 구글링을 통해 sort()라는 메소드를 찾았다!

❓Array.prototype.sort()
sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.

const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// expected output: Array ["Dec", "Feb", "Jan", "March"]

const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// expected output: Array [1, 100000, 21, 30, 4]

나는 근데 이 메소드를 보고 문제를 해결할 수 있다는 생각에 너무 흥분해버려서 어떤식으로 작동하는지 제대로 살펴보지않고 함수를 사용해봤다.
이 sort()라는 메소드는

const arr = [5, 3, 2, 1, 10];


// 비교함수 : 오름차순 정렬 (ASC)
arr.sort((a, b) => {
  return a - b;
});
console.log("ASC1 : ", arr); // [1, 2, 3, 5, 10]

arr.sort((a, b) => {
  if (a > b) return 1;
  if (a < b) return -1;
  return 0;
});
console.log("ASC2 : ", arr); // [1, 2, 3, 5, 10]



// 비교함수 : 내림차순 정렬 (DESC)
arr.sort((a, b) => {
  return b - a;
});
console.log("DESC1 : ", arr); // [10, 5, 3, 2, 1]

arr.sort((a, b) => {
  if (a > b) return -1;
  if (a < b) return 1;
  return 0;
});
console.log("DESC2 : ", arr); // [10, 5, 3, 2, 1]

return하는 값이 양수인지, 음수인지에 따라 다르게 정렬된다는 것을 생각하지 않은채 조건을 넣을 수 있다는 것만 생각하고 sort함수 안에 조건문을 써버렸다 그결과

for(var i = 1; i<= arr.length ; i++){
      arr.sort(function(arr[i],arr[i-1]){
        if(arr[i].length > arr[i-1].length){
          return arr[i];
        }else{
          return arr[i-1]
        }
      })
    }
  return arr;
    
  }

당연히 나올리가..없었다.
그리고 내 친구이자 멘토인 녀석이 말해준 것을 듣고 깨달아서 sort메소드를 다시봤는데 너무 허탈해서 웃음이 났다.....
그리고 다시보고 나온 결과는?

function find_longest_word(arr) {
 return arr.sort((a,b) => a.length - b.length).pop();
 }
 //결과 : Exercise

허탈했지만 기분이 너무 좋았다. 몇시간 동안 머리싸매던 것이 풀려서 말이다..
역시 나는 수련이 부족한 것 같다!
더욱 열심히 해서 이런 문제는 30초만에 푸는 것이 나의 목표이다
정진하자 정진!!!!!

[출처] https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

profile
새로운 걸 배우는 것을 좋아하는 프론트엔드 개발자입니다!

0개의 댓글