본문 바로가기
DEV/알고리즘 문제 풀이

알고리즘 다시 공부하기 2일차

by krokerdile 2022. 9. 11.

2일차

파이썬 자료구조 정리

리스트

→ 수정 가능한 일련의 요소들을 저장하는데 주로 사용하는 구조

  • 저장 되는 요소들의 자료 유형은 같지 않아도 됨
  • 리스트를 만들려면 [] 안에 데이터 요소들을 넣고 쉼표로 구분해주면 됨
  • 알고리즘이 작동할 때 임시 데이터를 다루는데 유용함
aList = ["Hello", 33 , "Daegu", True]
print(List)

주로 사용 하는 방식

  1. 리스트 인덱싱 → list_colors[1]
  2. 리스트 슬라이싱 → list_colors[0:2] → 인덱스 0번에서 1번 까지 슬라이싱(0 ≤ a < 2)

→ list_colors[:2] → 인덱스 처음부터 1번까지 슬라이싱((0 ≤ a < 2)

  1. 네거티브 인덱싱 → 끝에서 거꾸로 세어주는 방식 → 뒤에서 부터 세어준다고 생각하면 됨
  2. 내포(nesting)
a = [1, 2, [100, 200, 300], 6]
max(a[2]) 

output : 300

a[2][1]

output : 200

⭐시간 복잡도 - 자주 쓰는 것들

  • append() : item 맨 뒤에 추가 → O(1)
  • clear() : 모든 item 삭제 → O(1)
  • pop() : index 로 item을 가져오면서 삭제 → O(1)
  • remove() : value 로 item 삭제 → O(n)
  • del list[0] : index 참조로 리스트 값 삭제 → O(n)
  • list[?:?] : list 슬라이싱 → O(n)
  • sort() : list sorting → O(nlogn)
  • len(?) : list 길이 → O(1)

람다 함수

→ 함수를 즉시 생성할 수 있다는 것이 특징 + “익명함수”라고도 함

  • 데이터 필터링
list(filter(lambda x: x>100 [-5 , 200, 300, -10, 10, 1000]))

output : [200, 300, 1000]

*** 생각보다 람다함수를 많이 쓰게 되는거 같은데 이런식으로 쓰는 건 또 책에서 처음 보는 거 같음**

  • 데이터 변환
list(map(lambda x:x**2, [11,22,33,44,55]))

output : [121, 484, 1089, 1936, 3025]

*** map을 이용해서 이런식으로 쓰면 for문으로 안돌려도 되서 괜찮아 보임**

range함수

→를 이용하면 숫자로 구성된 큰 리스트를 쉽게 생성 가능함

ex1) x = range(6)
list(x)

output : [0, 1, 2, 3, 4, 5]

ex2) oddN = range(3, 30, 2)
list(oddN)

output : [3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29]

튜플

→ 수정할 수 없는 자료 구조로 읽기만 가능함 → 튜플은 요소들을 ()로 감싸서 생성!!

→ 여러 자료 유형을 요소로 가질 수 있음

a = (1, 2, (100, 200, 300), 6)
max(a[2])

output : 300 

a[2][1]

output : 200 

→ 성능 향상을 위해서 변형할 필요가 없는 데이터 자료 일 경우 튜플을 사용해주는 것도 좋음 !!

딕셔너리

→ 데이터 값을 키-값 쌍으로 저장 해두는 자료구조

데이터를 잘 식별 할 수 있도록 키를 설정해야 함

→ 값을 리스트로 지정하면 중첩된 딕셔너리를 만드는 것도 가능함

값의 경우, 어떠한 자료형도 가능함

list_colors ={
		"manual_color" : "Yellow",
		"approved_color" : "Green",
		"refused_color" : "Red"
}

print(list_colors)

output: {'manual_color':'Yellow', 'approved_color':'Green', 'refused_color':'Red'}

#값을 가져오는 방식
list_colors.get('approved_color')

output: 'Green'

#키에 대응하는 값을 갱신 해주는 방법
list_color['approved_color'] = "Purple"
print(list_colors)

output: {'manual_color':'Yellow', 'approved_color':'Purple', 'refused_color':'Red'}

세트

→ 여러 유형으로 구성된 요소의 컬렉션(이게 뭔말일까요?)

→ 수학에서 자주 접한 개념인 집합과 같은 개념으로, 하나의 포대 안에 모든 데이터를 몰아서 저장하는 것, 세트 타입에서는 각 요소들의 순서를 매길 수 없으며, 중복된 값 또한 허용하지 않습니다.

우리가 아는 정렬이랑 같은 개념으로 사용하는 자료구조

세트 연산

  • A|B → 두 집합의 합집합
  • A%B →두 집합의 교집합

벡터

→ 데이터를 저장하는 일차원 자료구조

  1. 리스트로 사용하기
myList = [ 22, 33, 44, 55 ]
print(myList)

output: [22 33 44 55]

print(type(myList))

output: <class 'list'>