CS/Data Structure & Algorithm 13

Stack (LIFO, 순차적자료구조)

스택 자료구조란, 하나씩 쌓아올린 형태의 자료구조 이며, 그림과 같이 정해진 방향(한방향)으로만 쌓을 수 있다. Stack은 보통 세가지 연산 삽입(push), 삭제(pop) 그리고 지우지 않고 스택의 가장 위 값을 알려주는 (top)이 있다. 후에 나올 Queue와 반대 구조인 후입선출(Last-In-First-Out) 구조이다. 스택의 기본구조와 세가지 함수를 간단하게 구현해보았다. class Stack: def __init__(self): self.items=[] def push(self, val): self.items.append(val) def pop(self): try: return self.items.pop() except IndexError: print("스택이 비었습니다.") def to..

배열(Array) vs 리스트(list)

자료구조에서 배열이라 함은, 가장 기본적이고 순차적인 자료구조이며 매우 중요하게 다루기 때문에 대부분의 교재 및 강의에서 앞쪽에 배치되어있다. 배열과 리스트를 명확하게 구분하는것은 쉽지 않으며, 구조적 차이를 가지고 있다. Array =>연속된 메모리 공간에 할당 List => 메모리가 연속적이지 않고 다음 노드가 가르키는 주소값을 가지고 있다. C에서는 읽기 쓰기 밖에 지원이 안되는데 반면, Python의 리스트는 다양한 연산들 (append,pop,insert,remove,index)을 제공한다. 또 List는 용량을 자동조절하는 기능도 있다.(=Dynamic Array) 구현이 복잡하지만, 삽입/삭제 연산이 많을때는 리스트 자료구조를 사용하는것이 효율적이다.

자료구조란, 그리고 알고리즘

Data -> 저장공간 + 읽기/쓰기/삽입/삭제/탐색(연산) 자료구조란 => 컴퓨터에서 자료를 효율적으로 관리하고 구조화시키는 방법 ex) 변수(Variable), 배열(Array), List 등 인류최초의 알고리즘은 최대공약수(GCD)계산 알고리즘 이다. 알고리즘 수행시간: 최악의 입력에 대한 기본연산 횟수 T(n) 알고리즘 시간 복잡도를 계산할때 크게 두가지 방법이 있는데, 1. 모든 입력에 대해 기본연산 횟수를 더한 후 평균 => 정확한 방법이지만 현실적으로 불가능하다. 2. worst case 입력에 대한 기본연산 횟수를 측정한다. => 어떤 입력에 대해서도 이보다 수행시간이 크지 않음(적합) ex) T1(n) = 2n-1 , T2(n)=4n+1, T3(n)=2n^2-3n일때, T2가 T1보다 2..