문제 해결 기교와 나의 문제 해결 방법

이 글에서 나는 면접 문제를 해결함으로써 나의 문제 해결 방법을 분해하고 너에게 조언을 해주고 싶다. 네가 자신의 문제를 해결하는 데 도움을 줄 수 있기를 바란다.
나는 간단한 문제를 해결할 것이지만, 나는 여기에서 제시한 제시가 면접 문제뿐만 아니라 더욱 실제적인 문제에도 유용할 것이라고 희망한다.

카탈로그

  • Problem solving tips
  • The problem
  • Breaking down the problem
  • Naive solution
  • Improving on the naive solution
  • 문제 해결의 기교


    너의 이전의 경험과 지식은 너의 문제 해결 능력에 매우 큰 영향을 끼친다.만약 둘 다 비교적 높다면, 너는 문제를 더욱 쉽게 해결할 수 있을 것이다.
    그러나 당신은 불가능해 보이는 문제, 심지어는 어디서부터 시작해야 할지 모르는 문제를 어떻게 처리합니까?
  • 문제를 형상화하다.도형, 도표를 그려 보세요. 표나 행렬로 당신의 데이터를 표시하세요.문제를 가시화하면 문제를 새로운 시각으로 볼 수 있다. 이것이 바로 해결 방안을 찾는 데 필요한 것일 수도 있다.
  • 만약에 한 그룹의 예에 문제가 있다면 본문의 예와 같이 예를 많이 들어 보세요.그것들은 네가 이전에 그렇게 뚜렷하지 않았던 부족한 부분을 발견하는 데 도움을 줄 수 있다.
  • 만약 당신이 오랫동안 갇혔다면 이 문제를 다시 한 번 볼 가치가 있을지도 모른다. 문제의 일부분이나 가설의 일부분이 틀렸다는 것을 오해하지 않도록 해야 한다.
  • 좀 쉬세요. 괜찮으면.새로운 시각으로 문제를 바라보는 것은 커다란 영향을 미칠 것이다.우리가 한 문제에 전념할 때, 우리는 무의식적으로 문제를 해결하는 특정한 방식에 전념할 수 있다. 이것은 가장 좋은 방식이 아니다.이 문제에서 주의력을 떼고 돌아보면 새로운 생각이 생길 수도 있다.
  • 누군가에게 도움을 청하다.때때로, 지식이나 경험이 부족하기 때문에, 우리는 혼자서 만족스러운 해결 방안을 찾을 수 없을 수도 있다.두 머리가 하나보다 낫다.
  • 구글은 당신의 친구입니다. 바퀴를 재발명할 필요가 없습니다.
    면접을 위해 문제를 해결하거나 문제를 해결하는 기교를 연습하고 있지 않으면 인터넷에서 해결 방안을 찾아야 한다.
    만약 당신이 정확한 문제의 해결 방안을 찾지 못한다면 비슷한 문제를 찾아보세요.
  • 변수, 함수 등의 사용 의도에 대한 명칭을 항상 표시합니다. 때로는 중요하지 않은 것 같지만, 특히 복잡한 코드에 대해서는 그렇습니다.당신의 뇌는 추상적인 변수 이름의 의미를 분명히 하는 것을 걱정할 필요가 없다. 뇌는 수중의 문제에 집중해야 한다.
  • 포기하지 마.네가 포기하지 않는다면, 너는 결국 성공할 것이다.
  • 문제.


    내가 토론하고자 하는 문제를 '2화 문제' 라고 부른다.이것은 매우 환영받는 면접 문제(source다.
    구체적으로 다음과 같다.

    "Find all the pairs of two integers in an unsorted array that sum up to a given S."

    For example, if the array is [3, 5, 2, -4, 8, 11] and the sum is 7, your program should return [[11, -4], [2, 5]] because
    11 + (-4) = 7 and 2 + 5 = 7.


    문제를 해명하다


    우리가 해야 할 첫 번째 일은 우리가 문제와 그 제약 요인을 이해할 수 있도록 확보하는 것이다.우리가 문제를 해결한 후에 이렇게 하는 것이 더욱 쉽다.
    이런 상황에서 문제는 매우 직접적이기 때문에 오해할 공간이 많지 않다.
  • 우리는 반드시 두 숫자를 더해야만 하나의 합을 얻을 수 있다
  • 각 숫자 조합에 대한 합계
  • 이 총화 중 어느 것이 주어진 총화와 같은지 찾아내기
  • 원시 솔루션


    우리가 이 문제를 정확하게 이해한 후에 다음 단계는 간단한 해결 방안을 시도하는 것이다. 이것은 우리가 생각한 가장 뚜렷한 해결 방안이다.간단한 해결 방안은 통상적으로 효율이 낮아서 실천에서 그다지 쓸모가 없을 수도 있지만, 이것은 당신이 문제에 대한 이해를 깊이 있게 하는 좋은 방법이며, 우리가 기초를 닦은 후에 우리가 원하는 목적을 달성하기 쉽다.
    이제 우리의 예시를 위해 해결 방안을 작성해 봅시다.자바스크립트를 사용할 것입니다:
    function twoSum(array, goalSum) {
      const solution = [];
      for(let i = 0; i < array.length; i++ ) {
        for(let j = i+1; j < array.length; j++ ) {
          const sum = array[i] + array[j];
          if(sum === goalSum)
            solution.push([array[i], array[j]])
        }
      }
      return solution;
    }
    
    console.log(twoSum([3, 5, 2, -4, 8, 11], 7));
    
    여기에서 나는 단지 모든 가능한 숫자를 조합한 후에 그것들이 주어진 합과 같은지 검사할 뿐이다.
    이 해의 시간 복잡도는 O(n2)이다.더 잘할 수 있는지 봅시다.

    단순화된 솔루션 개선


    우리는 서로 다른 방식을 통해 해결 방안을 개선할 수 있다.어떤 경우에는 속도가 가장 중요하지만, 다른 경우에는 기억력을 걱정해야 한다.때때로 더 읽을 수 있는 해결 방안을 찾는 것도 더 효율적인 해결 방안을 선택하는 것보다 낫다. 이것은 완전히 당신이 무엇을 필요로 하는지에 달려 있다.
    해결 방안을 찾을 때 목표를 명심하세요.때때로 당신은 다양한 해결 방안을 고려하여 목표에 가장 적합한 방안을 선택할 수도 있다.
    이런 상황에서 나는 속도를 추구할 것이다.다음은 코드입니다.
    function twoSum(array, goalSum) {
      const set = new Set();
      const solution = [];
      for (let i = 0; i < array.length; i++) {
        const targetNumber = goalSum - array[i];
        const condition = set.has(targetNumber);
        if (condition) {
          solution.push([array[i], targetNumber]);
        }
        set.add(array[i]);
      }
      return solution;
    }
    
    console.log(twoSum([3, 5, 2, -4, 8, 11], 7));
    
    이 해결 방안에서 나는 Set() object를 사용하여 값을 저장하고 찾는다.
    단계:
  • 나는 수조
  • 의 원소를 사용하여 목표와
  • 나는 이 숫자를 set.has() 찾기
  • 의 목표로 사용한다
  • 만약에 숫자가 집합 내부에 있다면 우리는 한 쌍이 있는데 이를 해수조로 전송할 수 있다.
  • 그룹의 현재 번호가 집합에 추가되었습니다.이 제품은 검색 후에 추가되어 중복 쌍이 없는지 확인하고 검색 속도를 높입니다. 왜냐하면 모든 요소가 처음부터 그 안에 있는 것이 아니라, 검색 속도가 느려지기 때문입니다.
  • 일단 내가 수조 중의 모든 항목을 반복하면 나는 해결 방안의 수조로 돌아갈 것이다.
  • 이 해결 방안에 대해 시간 복잡도는 O(n)이다. 왜냐하면 우리는 그룹의 모든 항목에 대해 알고리즘을 실행해야 하기 때문이다.원시 해결 방안에서 모든 항목을 서로 비교하여 O(n2)의 시간 복잡도를 초래한다.

    읽어주셔서 감사합니다!!


    이것은 내가 여기에 있는 첫 번째 댓글이다. 나는 그것이 너무 무섭지 않기를 바란다.
    피드백이 있으면 감격을 금할 수 없습니다.

    좋은 웹페이지 즐겨찾기