[자료구조] Priority Queue
·
Python 활용하기
Priority QueueFIFO(First In First Out) 형식우선순위가 높은 데이터가 먼저 출력되는 형식Heap최대, 최소를 빠르게 찾기 위한 자료구조배열에서는 $O(n)$이 걸린다면, 힙을 사용하면 $O(logn)$완전이진트리최대힙, 최소힙 두 종류데이터 삽입, 삭제 원리(최소힙) 데이터 삽입 시, 가장 아래에 데이터 저장 후 부모 노드와 비교해가면서 작은 값이 부모 노드에 갈 수 있도록 위치 교환(최소힙) 데이터 삭제 시, 루트 노드를 삭제하고 가장 아래 데이터를 루트 노드로 옮기고, 왼쪽과 오른쪽의 크기와 비교해 더 작은 쪽과 위치 교환import heapqhq = []heapq.heappush(hq, 1)heapq.heappush(hq, 5)heapq.heappush(hq, 3)hq[..
데코레이터
·
Python 활용하기
데코레이터 함수를 직접 수정하지 않고 기능을 추가하고자 할 때 사용한다. def deco(func): def wrapper(): print('*' * 10) func() print('*' * 10) return wrapper def hello(): print('hello!') decorated = deco(hello) hello() decorated() # ********** # hello! # ********** @기호를 통해 보다 쉽게 사용할 수 있다. def deco(func): def wrapper(): print('*' * 10) func() print('*' * 10) return wrapper @deco def hello(): print('hello!') hello() # **********..
행렬의 곱셈
·
Python 활용하기
계산 방법 1 mat1이 n행 m열, mat2이 p행 q열 행렬의 곱셈 연산은 3중 for문으로 해결할 수 있다. result = [[0] * n for _ in range(n)] for i in range(n): for j in range(q): for k in range(m): result[i][j] += mat1[i][k] * mat2[k][j] 계산 방법 2 *는 unpacking을 수행한다. 따라서 unpacking후 zip을 수행하면 행과 열을 바꿀 수 있다. mat2의 행과 열을 바꾼 후에는, 두 리스트의 곱셈과 같은 연산 과정이다. result = [] for mat1 in a: tmp = [] for mat2 in list(zip(*b)): tmp.append(sum([x*y for x,..
변수의 범위
·
Python 활용하기
유효 범위 (variable scope) 변수의 선언에 따라 해당 변수가 미치는 범위 python에는 지역변수(local variable)과 전역변수(global variable)이 있다. 지역변수 (local variable) 함수 내에서 선언된 변수 일반적으로는 함수 내에서만 사용 가능하다. def func(): a = 'local variable' print(a) func() # local variable 지역변수 (global variable) 함수 외부에서 선언된 변수 gloabl 키워드를 통해 함수 내부에서 사용 가능하다. def func(): a = 'local variable' print(a) a = 'global variable' print(a) func() # global variabl..
2차원 리스트 생성
·
Python 활용하기
python에서 아래와 같이 2차원 리스트를 생성하면, 얕은 복사가 되어 A의 모든 요소가 같은 객체를 가리킨다. A = [[0]*4] * 3 따라서, 아래와 같이 for문을 활용하여 2차원 리스트를 생성해야한다. A = [[0 for _ in range(4)] for _ in range(4)]
[자료구조] 트라이(Trie)
·
Python 활용하기
트라이(Trie)란? 문자열을 빠르게 탐색할 수 있는 자료구조 길이가 L인 문자열을 이진탐색하면 O(LlogN)이지만, 트라이 구조를 활용하면 O(M)로 더 효율적이다. 트라이(Trie) 구현 Node 구현 key : 입력될 값 data : 문자열의 종료 표시 (문자열 전체) child : 자식 노드 class Node(object): def __init__(self, key, data=None): self.key = key self.data = data self.child = {} Trie 구현 class 초기화 비어있는 node 생성 class Trie: def __init__(self): self.head = Node(None) 삽입(insert) 구현 문자열을 한 글자씩 child에 저장하고, 마..