<aside> 💡 알고리즘 노트란?

</aside>

시간이 오래 지나고 봐도 바로 핵심 파악이 가능하게 기록해놓은 알고리즘 정리 노트

알고리즘은 시간이 지나면 잊어버리게 됩니다. 어렵고 자주 쓰이지 않는 유형일수록 기억이 안나는 것은 당연하죠. 우리의 목표는 짧은 시간에 필수 유형을 익혀서 코딩 테스트를 통과하는 것이기 때문에 효율적으로 공부하는것이 중요합니다. 가장 좋은 방법은 장기 기억으로 넘어갈 때까지 같은 문제를 여러번 반복해서 풀어보는것이지만 모든 유형에 대해 반복적으로 풀어보는것은 많은 시간을 할애해야 합니다.

따라서 문제의 핵심 개념을 정리해놓고 복습 시 빠르게 훑어보거나 기억이 안나는 개념들을 효율적으로 복습할 수 있게 해야합니다.

<aside> 📎 작성 방식

</aside>

  1. 본인의 에디터에 알고리즘노트 디렉토리를 생성하고 유형별로 디렉토리를 생성합니다.(예시 사진은 vscode)

스크린샷 2024-03-22 오전 11.08.33.png

  1. 각 문제에서 물어보는 핵심 개념을 제목에 정리합니다.(문제번호_핵심 개념)

스크린샷 2024-03-22 오전 11.08.58.png

  1. 각 문제에는 다음을 포함합니다.

    1. 간단한 문제설명
    2. 문제를 푼 과정(생각 과정)
    3. 중요 개념(어떤 알고리즘/자료구조를 사용했는지, 시간복잡도는 얼마인지 등)
    import math
    # 문제설명 : 에라토스테네스의 체를 이용한 소수 판별 문제
    # 핵심 개념 : 소수 판별 함수(에라토스테네스의 체)
    
    def is_prime_number(n):
        # 2부터 n까지의 모든 수에 대하여 소수 판별
        array = [True for i in range(n+1)]  # 처음엔 모든 수가 소수(True)인 것으로 초기화(0과 1은 제외)
    
        # 에라토스테네스의 체
        for i in range(2, int(math.sqrt(n)) + 1):  # 2부터 n의 제곱근까지의 모든 수를 확인하며
            if array[i] == True:  # i가 소수인 경우(남은 수인 경우)
                # i를 제외한 i의 모든 배수를 지우기
                j = 2
                while i * j <= n:
                    array[i * j] = False
                    j += 1
    
        return [i for i in range(2, n+1) if array[i]]
    # 에라토스테네스의 체 사용 조건
    # n이 100만 이내로 주어지는 경우 사용, 계산상 400만번 연산임
    # 시간 복잡도 O(NloglogN)
    

    매일 문제를 풀면서 바로 정리하시면 됩니다. 시간 내서 정리한다는 느낌보다는 문제를 좀 더 체계적으로 푼다는 생각으로 정리하시면 됩니다.

    2기 참가자 오*환님이 작성하신 노트 예시입니다.

    image.png