알고리즘: 자료구조

Ju_Nik_e·2023년 5월 1일
0

배열과 리스트

  • 배열리스트는 자료구조 영역에서 데이터를 담을 때 사용하는 가장 기본적인 자료구조임
  • 파이썬에서는 리스트가 배열의 특성도 가지고 있어서 크게 구분하지는 않지만 특징과 동작 원리는 이해하고 있어야 함

배열

  • 메모리의 연속된 공간에 값이 채워져 있는 형태의 자료구조
  • 인덱스를 통해 배열의 값을 참조할 수 있음

배열의 특징

  1. 인덱스를 사용해 값에 바로 접근 가능
  2. 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어려움(해당 인덱스 주변에 있는 값을 이동시키는 과정이 필요하기 때문)
  3. 배열의 크기는 선언 시 지정할 수 있으며, 한 번 선언하면 크기를 늘리거나 줄일 수 없음.
  4. 구조가 간단하므로 코딩 테스트에서 많이 사용

리스트

  • 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료 구조

리스트의 특징

  1. 인덱스가 없어, 값에 접근하려면 Head 포인터부터 순서대로 접근해야 함(값에 접근하는 속도가 느림)
  2. 포인터로 연결돼 있어 데이터를 삽입/삭제하는 연산 속도가 빠름
  3. 선언할 때 크기를 지정하지 않아도 됨(크기가 변하기 쉬운 데이터를 다룰 때 적절함)
  4. 포인터를 저장할 공간이 필요해 배열보다 구조가 복잡함

파이썬의 리스트

  • 리스트와 배열의 장점을 모두 갖도록 구현됨
    (크기가 가변적이고, index로 바로 접근 가능)

구간 합

  • 합 배열을 이용해 시간 복잡도를 더 줄이기 위해 사용하는 특수한 목적의 알고리즘

구간 합의 핵심 이론

  • 합 배열 S 정의
    S[i] = A[0] + A[1] + ... + A[i]

합 배열을 미리 구해놓으면 일정 범위의 합을 구하는 시간 복잡도가 O(n)에서 O(1)로 감소함

  • 합 배열을 만드는 공식

    S[i] = S[i-1] + A[i]

  • 구간 합을 구하는 공식

    i에서 j까지 구간 합을 구할 때,
    S[j] = S[i-1]

문제풀이

백준 11720[숫자의 합 구하기]

백준 1546[평균]

백준 11659[구간 합 구하기4]

백준 11660[구간 합 구하기5]

0개의 댓글