ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2021080
    알고리즘관련/공부하기 2021. 8. 9. 15:38

    알고리즘 문제를 풀때 어떤 자료구조를 사용해야하는가?

     

    python

    snake = []

    snake.append((1,3))

    snake.append((1,2))

    snake.append((1,1))

    (1,3) (1,2) (1,1) => (1,4) (1,3) (1,2)

     

    1. 단일 객체에 대한 표현 - Point

    : 간단하기 때문에 굳이 자료구조를 사용하지 않음.

     

    2. 단일 객체에 대한 표현 - Array

     

    1. 탐색 : O(N)

    2. 삽입 : O(N) but 맨 뒤 삽입은 O(1)

    3. 삭제 : O(N) but 맨 뒤 삭제는 O(1)

    4. 값 조회 : O(1)

    - 머리 추가 : O(N)

    - 뱀 옮기기 : O(N)

     

    3. 단일 객체에 대한 표현 - LinkedList

    참고로 파이썬에선 링크드리스트가 없어 deque로 대체, CPP는 리스트 사용

    1. 탐색 : O(N)

    2. 삽입 : O(N) but 삽입될게 정해지면 O(1)

    3. 삭제 : O(N) but 무엇이 삭제될지 안다면 O(1)

    4. 값 조회 : O(1)

    - 머리 추가 : O(1)

    - 뱀 옮기기 : O(N)

     

    4. 단일 객체에 대한 표현 - Doubly Linked List(Deque)

    1. 탐색 : O(N)

    2. 삽입 : O(N) but 맨뒤, 맨앞 O(1)

    3. 삭제 : O(N) but 맨뒤, 맨앞 O(1)

    4. 값 조회 : O(N), 첫번째는 O(1)

    - 머리 추가 : O(1)

    - 뱀 옮기기 : O(1)

     

    5. Stack

    1. 맨 위 원소 조회: O(1)

    2. 맨 위 원소 삽입: O(1)

    3. 맨 위 원소 삭제: O(1)

    => 앞에 추가는 불가능하다.

     

    파이썬 queue 대신 deque를 쓰는 이유

    : 코딩테스트를 할때는 queue의 여러 기능들이 시간초과를 일으킬 수 있기 때문

     

    6. Queue

    1. 맨앞, 맨뒤 원소 조회 : O(1)

    2. 맨 뒤 원소 삽입 : O(1)

    3. 맨 앞 원소 삭제 : O(1)

     

     

    <겹치는지 여부 확인>

    1. 직접 순회

    시간 복잡도 : (N^2)

    Points 외 추가적인 공간복잡도 : O(1)

     

    2. Checked 배열

    시간 복잡도 : O(N)

    Points 외 추가적인 공간복잡도 : O(R^2) (단, R는 checked 배열의 크기)

     

    1차원 리스트를 추가해서 시간복잡도를 줄이고 싶어 하지만 최악의 경우엔 결국 시간복잡도는 O(N), 공간복잡도는 O(R^2)가 된다. 그래서 결국 2차원 리스트를 이용하는 것과 1차원리스트에서 겹치는 부분을 체크하는 것이 동일하다.

     

    3. Hash Set

    시간 복잡도 : O(N)

    Points 외 추가적인 공간복잡도 : O(N)

    시간 복잡도와 공간 복잡도가 가장 적지만 구현이 어렵다.

     

    <여러 객체를 이동>

    <다중 객체에 대한 표현>

    1. 1차원 배열

    2. 2차원 배열

Designed by Tistory.