신입 개발자에서 시니어 개발자가 되기까지

[section4]문제해결접근법 본문

javascript/[Udemy] algorithm & data structure

[section4]문제해결접근법

Jin.K 2022. 8. 30. 10:20

며칠 간 미뤄왔던 알고리즘 블로깅을 해야겠다. one Note에는 따로 필기를 했는데, 강의의 저작권을 침해하지 않는 선에서 블로깅을 해야하니 수정하는 게 귀찮아서 미루고 있었다.

문제를 이해하기

    a. 나만의 방식대로 문제를 생각할 수 있는가?
    b. 문제에 어떤 입력값이 들어가야 하나
    c. 문제에 대한 해결책에서 나와야 하는 출력값은 무엇인가?
    d. 입력값에 따라 출력값이 나오는가?
    e. 이 문제에서 가장 중요한 것을 어떻게 분류할 것인가

예시를 생각하기

    a. 예시를 떠올리는 것이 문제를 이해하는 데 도움을 준다.
    b. 해결책을 도출한 후 검증을 할 수 있다.

break it down (세분화하기) : 의사코드를 써라

    a. 예시 : 문자열을 받아서 문자열 내의 각 string과 number의 개수를 출력하라.
        i. key와 value로 짝이 이루어진 객체를 반환해야 한다. 반환하는 string은 소문자여야 함. 'hello22'를 인자로 전달받았다면 {2 : 2, h:1, e: 1, l:2, o:1} 이런식으로 되어야 함.
        ii. 인자로 전달받은 string에 loop문을 적용해서 각 글자를 소문자로 만들어 준다.
        iii. 글자는 객체의 key 값으로 전달 해주는데, 만약 문자가 객체 내에 이미 존재하면 1을 더 해주고 존재하지 않으면 해당 문자를 추가하고 값을 1로 만들어준다.
        iv. 전달받은 string 내에 있는 공백, 숫자 등이 있다면 그것에 대해서는 아무런 반환도 하지 않는다.
        v. 만들어진 객체를 반환한다.
    b. 의사코드를 작성해야 하는 이유
        i. 응용할 만한 힌트를 얻을 수 있다.
        ii. 면접관에게 제대로 작동될지 물어볼 수 있다. 혹은 면접관이 먼저 도와줄 수도 있다.
        iii. 혹여나 시간이 모자라 문제를 다 풀지 못했어도, 문제에 대해 이해하고 있음을 보여줄 수 있고, 문제에 대한 틀을 잡는 능력, 문제해결 과정 등에 대해 어필할 수 있다. 마지막 반환 값이 틀려도 합격하는 경우가 많다. 과정이 중요하기 때문.

단순화하기

    a. 3번의 예시 문제를 푼다고 했을 때 단순화하는 과정
        i. 대문자/소문자 처리는 일단 미룬다. 영어, 숫자가 아닌 string에 대한 처리 또한 제쳐 둔다.
        ii. 먼저 각 string과 number에 대한 개수를 객체에 입력하는 것부터 처리한다.

Look Back & Refactoring

    a. for loop 문을 for of 문으로 바꾼다.
    b. if else 구문을 or구문으로 변환시킨다.
    c. 영숫자인지 아닌지 확인하는 함수를 만든다.
    d. 소문자로 바꾸는 작업은 영수자인지 아닌지 확인한 다음에 하도록 코드의 위치를 바꾼다.

영숫자를 확인하는 법

  • charCode가 정규표현식보다 두 배 이상 빠름
      a. 정규표현식
          i. /[a-z0-9]/
      b. charCodeAt함수를 이용해서 check하기.
          i. 47<  string.charCodeAt() <58은 숫자
          ii. 64 < string.charCodeAt() < 91 이면 대문자
          iii. 96 < string.charCodeAt() < 123 이면 소문자