개발 R.I.P.

고차함수 알고리즘 다시 풀이

편행 2021. 5. 2. 17:40
반응형

오늘은 점심부터 저녁 시간까지는 고차함수 알고리즘을 다시 풀이해봤다.

역시나 이전에 풀었을 때, 제대로 풀리지 않았던 문제들은 다시 봐조 풀리지 않았다.

그 구조에 대해서 논리적으로 이해를 하지 못함이 분명하다.

 

다시 초기화 시켜놨고, 그 부분들만 다시 한 번 풀어보려 한다.

그 외 이후 저녁시간에는 일반 알고리즘 문제를 다시 풀어봐야겠다.

 

알고리즘 문제중에 한가지 이해가 안되는 부분이 있다. 그것에 대해서 해결을 하고,

추가적으로 블로깅을 해야겠다.

 

github.com/happydrum819/Seungwoobro/blob/master/Test/seungwoobro.js

 

happydrum819/Seungwoobro

Contribute to happydrum819/Seungwoobro development by creating an account on GitHub.

github.com

위의 두개의 코드가 동일하다고 생각하는데, 막상 함수를 돌려보면 다른 값이 나온다.

let arr = ['one', 'two', 'no']

를 입력하면 첫 번째 코드의 결과는 2가 나오고, 두 번째 코드의 결과는 3이 나온다.

그 이유에 대해서 계속 고민을 해보고 찾아보려 한다.

 

5:42 pm

 

이유를 알게 됐다. 

이 이유를 찾지 못한 원인은 3가지였다.

 

첫 번째, console.log 사용법을 모른다.

두 번째, reduce의 개념을 이해하지 못했다.

세 번째, .length도 정확히 이해하지 못했다.

function getLengthOfLongestElement(arr) {
    return arr.reduce(function(a, b){
        console.log("a: ", a);
        // console.log("a: ", a.length)
        console.log("b: ", b.length)
        if (a>=b.length){
            return a;
        }
        else {
            return b.length
      }
    }, 0);
  }
  // 두개가 뭐가 다른거지?
  
  
  function getLengthOfLongestElement2(arr) {
    if (arr.length === 0) {
      return 0;
    }
  
    return arr.reduce(function (acc, cur) {
        console.log("acc: ", acc.length)
        console.log("cur: ", cur.length)
      if (acc.length >= cur.length) {
        return acc;
      } else {
        return cur;
      }
    }).length;
  }

  const arr = ['one', 'two', 'no'];
console.log(getLengthOfLongestElement(arr))
  console.log(getLengthOfLongestElement2(arr))

컴공과 동생한테 물어보니 첫 번째 코드의 a 에 console.log를 찍어보니 a가 계속 undefined가 된다고 했다.

원인을 파악하기 위해선 console.log가 중요한데, 어떻게 찍는지도 모르니 계속 갸웃 갸웃하기만 한것이다.

먼저 console.log를 공부해야겠다.

 

두 번째 reduce의 누적값에 대한 이해가 없었기에 초기 값이 어떻게 적용되는지도 정확히 몰랐다.

첫 번째 코드를 보면, 내가 초기값을 0으로 지정해줬는데

그 0의 길이를 구하고 있었다... 숫자값의 길이를 찍어보면, undefined가 나온다...

length라는 메소드는 문자열, 배열, 객체의 길이를 나타내는 것이지

숫자의 길이를 나타낼 수는 없다.

그렇기에 undefined만 계속 나온 것이고, return 값은 현재 값만 나온 것이다.

 

이번 경험을 통해 가장 중요하게 깨닫게 된 것은 console.log의 사용법을 확실하게 정리하지 않으면 안된다는 것이다.

그것부터 정리하고 포스팅하겠다.

 

6:13

반응형