본문 바로가기
Algorithm

배열

by isn`t 2024. 9. 1.
* 파이썬 초정독 스터디 - 코딩테스트 합격자되기 파이썬 편 도서를 참고하여 작성된 글입니다.

배열과 리스트

  • 배열 내 데이터에 한 번에 접근할 수 있으니, 위치를 아는 경우 빠르게 탐색할 수 있음. 이와 같은 방식을 임의 접근 이라 하며, O(1)
  • 배열과 리스트는 정확히는 다르지만 파이썬의 리스트는 타 언어의 배열 기능을 그대로 활용하면서 크기도 가변적이며 여러 함수를 제공하므로 편의성이 좋음
  • 배열은 요소가 모두 동일한 타입으로 이루어져 있지만, 파이썬의 리스트는 여러 타입의 요소로 구성되어 유연함/효율성에 차이가 있음.

리스트 컴프리헨션

  • 리스트 내부에 코드를 작성하는 방법
  • for 문의 반복변수는 for문 앞에 표기하고, 리스트에 최종적으로 들어가는 값의 기준이 됨.
  • 나머지 모든 표현은 for문 뒤에 표기
    ex)
    numbers = []
    for i in range(1,11):
      numbers.append(i) #[1,2,3,4,5,6,7,8,9,10]

이 코드는 아래와 같이 리스트 컴프리헨션으로 표현할 수 있음

[x for x in range(1,11)] #[1,2,3,4,5,6,7,8,9,10]

만약 조건식을 추가한다면

[2*x for x in range(1,11)] #[2,4,6,8,10,12,14,16,18,20]

홀수인 x만으로 리스트를 만들도록 조건문을 추가한다면

[x for x in range(1,11) if x%2 == 1 ] # [1,3,5,7,9]

반복 변수가 여러개라면

[(x,y) for x in [1,3] for y in [2,4]] #[(1,2),(1,4),(3,2),(3,4)]

반복 변수가 여러 개이면서 조건식이 필요하다면

[(x,y) for x in [1,3] for y in [2,4] if x<2 if y%2==0] #[(1, 2), (1, 4)]

배열의 시간복잡도

  • 임의 접근시 O(1)
  • 맨 뒤에 삽입 O(1)
    • 맨 뒤의 인덱스는 계산이 필요 없으므로 임의접근과 동일
  • 맨 앞에 삽입 O(n)
    • 맨 앞에 삽입하는 경우 나머지 인덱스에 1칸씩 뒤로 미루는 연산이 발생하므로 총 n회.
  • 중간(임의의 위치)에 삽입 O(n)

배열을 선택할 때 고려할 점

  • 정확한 위치를 아는 경우가 아니라면 데이터 추가나 삭제에 드는 비용이 큼. 그만큼 인덱스를 이동시켜야 하기 때문.
  • 임의 접근으로 특정 데이터에 자주 접근하는 경우에는 효율적임
  • 너무 큰 데이터는 배열에 저장하면 연산 속도도 떨어지고 메모리도 많이 소모하게 됨
  • 따라서 배열을 사용하기 전에는 할당할 수 있는 메모리 크기를 확인하고, 임의접근이 아닌 중간위치 삽입/삭제가 빈번한지 확인해야 함

자주 사용되는 리스트 기법

  • append(item) : 끝에 데이터 추가
  • + [item] : 리스트를 덧붙일 수 있음
  • insert(index, item) : 특정 인덱스에 데이터 삽입
  • pop(index) : 특정 인덱스 삭제
  • remove(item) : 인수로 받은 값이 처음 등장하는 인덱스 삭제
  • index(item) : 특정 데이터가 처음 등장하는 인덱스 리턴
  • sort(), sorted() : 내림차순 데이터 정렬
  • count(item) : 특정 데이터가 포함된 홧수

'Algorithm' 카테고리의 다른 글

재귀(recursive)  (3) 2024.09.15
스택(stack)  (2) 2024.09.07
데이터 타입, 앱실론, 함수, 람다표현식  (0) 2024.08.24
시간 복잡도와 빅오 표기법  (0) 2024.08.17