Leetcode 그라인드를 시작하는 방법

2837 단어
이 블로그를 클릭했기 때문에 나는 당신이 leetcode의 완전한 초보자이고 최고의 기술 회사에 들어가거나 회사를 변경하기 위해 leetcode 여정을 시작하고 싶다고 가정할 수 있습니다.

leetcode Grind 에서는 leetcode만 사용하는 것이 아니라 GeeksForGeeks, HackerRank 등과 같은 다른 웹사이트를 사용하여 다양한 질문에 더 많이 노출되는 것을 권장합니다.

그러나 모든 유형의 문제를 해결하기 전에 데이터 구조가 구현되는 방식과 이에 대한 몇 가지 이론을 이해하는 것이 좋습니다. 그런 다음 실제 코딩으로 넘어갈 수 있습니다.

Blind75, Sean Prashad, Grokking 코딩 인터뷰 등과 같은 훌륭한 프로그래밍 패턴에 대해 들어보았을 것입니다. 이 패턴은 훌륭하지만(저도 사용합니다) 해당 질문만 하면 코딩을 잘할 수 있습니다. 이 질문은 다음과 같은 모든 패턴을 다룹니다. 중요하지만 그것들을 하는 것만으로는 그와 관련된 유사한 질문을 모두 할 수 있다는 보장이 없습니다.

예를 들어, 이진 트리에 대한 질문을 풀고 있는데 이진 트리의 깊이 우선 탐색을 발견했다고 가정해 보겠습니다. 이제 레벨 순서 탐색을 수행하는 방법을 알고 있지만 깊이 우선 탐색과 관련된 모든 질문을 항상 풀 수는 없을 수도 있습니다. 당신이 그들 중 많은 문제를 해결하지 않는 한. 예를 들어, 질문이

Q.) 이진 트리의 루트와 정수 targetSum이 주어지면 경로에 있는 노드 값의 합이 targetSum과 같은 모든 루트-잎 경로를 반환합니다.



Input: root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
Output: [[5,4,11,2],[5,8,4,5]]
Explanation: There are two paths whose sum equals targetSum:
5 + 4 + 11 + 2 = 22
5 + 8 + 4 + 5 = 22


이 질문에는 DFS를 사용해야 하지만 모든 노드의 개별 값을 저장하고 합산하여 targetSum과 같은지 확인하는 방법을 알고 있다고 가정해 보겠습니다.

완전한 초보자에게는 그러한 질문을 많이 연습하지 않는 한 편리하지 않을 수 있습니다.

이제 DFS의 반복 버전에서는 방문한 노드를 기억하고 더 트래버스하기 위해 스택을 사용해야 한다는 것을 알고 있습니다. 따라서 스택은 노드를 저장하는 데 사용된다는 것을 알고 있습니다. 따라서 스택에 노드만 저장하는 대신 저장할 수도 있습니다. 모든 이전 노드 값의 노드 합계와 함께 스택 내부의 튜플. 이와 같은 것



이 작은 트릭은 스스로 생각해내기가 어렵지만 일단 알고 나면 이진 트리의 DFS에 관한 많은 질문을 해결할 수 있습니다. 즉, 이제 스택 자체를 사용하여 이진 트리에 대한 더 많은 데이터를 저장할 수 있다는 것을 알게 되었습니다.

def pathSum(root):
    if not root: return None
    stack = [(root,root.val,[root.val])]
    ans = []
    while stack:
        node,val,li = stack.pop()
        if not node.left and not node.right and val == targetSum:
            ans.append(li)
        if node.right:
            stack.append((node.right,val+node.right.val,li+[node.right.val]))
        if node.left:
            stack.append((node.left,val+node.left.val,li+[node.left.val]))

    return ans


스택에 튜플을 사용하여 저장하는 이 트릭은 더 많은 질문을 해결하는 데 도움이 됩니다.

그래서 내 요점은 하나의 패턴을 읽은 후 가능한 한 많은 관련 문제를 푸는 것입니다. 고려해야 할 또 다른 중요한 사항은 쉬운 질문을 위해 처음에 5-7분 이상 시간을 내어 질문을 하지 않는 것입니다. 쉬운 질문에 대한 답을 5분 안에 찾지 못한다면 그에 대한 개념이 부족할 수 있습니다.

한 가지 더 기억해야 할 중요한 것은 간격 반복입니다. 모든 것을 기억하지 못할 수도 있습니다. 따라서 개념이나 질문을 완전히 이해하기 위해 때때로 복습하는 것이 좋습니다.

동기 부여
''게임에서 이기는 이유는 게임에서 자유로워지기 위해서입니다.'' - Naval Ravikant
해피 그라인딩

좋은 웹페이지 즐겨찾기