스택(Stack) 두 개로 큐(Queue) 구현하기
·
CS 공부/알고리즘
구현방법 큐를 입력할 때에는 하나의 스택의 push()를 통하여 데이터를 넣고, 큐를 추출할 때에는 다른 스택의 pop()를 통하여 선입선출을 만족시키는 방법 Enqueue - 첫번째 스택 stack1에 push를 하여 데이터 저장 Dequeue - 두번째 스택 stack2 이용 a. stack2가 비어있다면 stack1이 비어질 때까지 pop()하여 모든 데이터를 옮겨넣음. 이 결과로 stack1에서 가장 먼저 있었던 데이터는 stack2의 top에 위치하게 됨 b. stack2.pop()을 하면 가장 먼저 있었던 데이터가 가장 먼저 추출됨(FIFO) 코드 작성 class Queue(object): def __init__(self): self.instack=[] self.outstack=[] def e..
원형큐(Circular Queue)란?
·
CS 공부/자료구조
탄생계기 rear이 가르키는 포인터가 배열의 마지막 인덱스를 가르키고 있을 때 앞쪽에서 Dequeue로 발생한 배열의 빈 공간을 활용할 수 없다는 선형 큐의 문제점을 보완하기 위한 자료구조이다. 기본 동작 - 포인터 증가 방식이 (rear+1)%arraysize 형식으로 변환하기 때문에 배열의 첫 인덱스부터 다시 데이터의 삽입이 가능해진다. Enqueue - rear+1이 배열의 끝이고 포화상태가 아니라면 데이터 삽입을 진행한다. - (rear+1)%arraysize == front 라면 배열이 포화상태이다. (포화상태 여부를 판단하기 위해 배열의 1칸은 비워둠) Dequeue - front+1의 위치의 데이터를 배열에서 가지고온다. - 배열이 공백상태가 아니라면 데이터 삭제를 진행한다. - rear==..
Queue & Stack
·
CS 공부/자료구조
Queue란? 특징 - Queue의 사전적 의미는 줄, 혹은 줄을 서서 기다리는 것을 의미한다. - 선입선출(FIFO - First In First Out) 의 자료구조이다. → 먼저 넣은 데이터가 먼저 나온다. - 그러므로, 순서대로 처리해야할 때 사용한다. - 데이터를 추가하는 Enqueue / 데이터를 추출하는 Dequeue 연산이 있다. Enqueue - 맨 뒤에 데이터를 추가하면 되기 때문에 O(1)이다. (rear포인터 이용) Dequeue - 맨 앞의 데이터를 삭제하면 되기 때문에 O(1)이다. (front포인터 이용) 큐의 가장 첫번째 데이터를 front / 가장 마지막 데이터를 rear로 가리킨다. 접근방법은 front/rear로만 가능하다. - 활용 예시로는 하나의 자원을 공유하는 프린..
Dynamic Array란?
·
CS 공부/자료구조
배경 ※ Static Array의 한계점을 보안하기 위해.. Array의 경우 size가 고정되었기 때문에 선언시에 설정한 size보다 많은 데이터를 저장할 수 없다. (Static Array의 한계점) 이를 보안하기 위해 저장공간이 가득 차게되면 resize하여 유동적으로 array의 size를 조절할 수 있는 자료구조가 나왔다. 이를 Dynamic Array라 한다. Resize란? 데이터를 계속 추가하다가 기존에 할당된 메모리를 초과하였다. size를 늘린 배열을 선언한다. 그곳으로 모든 데이터를 옮긴다. 늘어난 크기의 size를 가진 배열이 된다. 이로써 새로운 데이터를 저장할 수 있게 된다. -> 데이터를 추가하다가 한계가 도달하는 시점에 더 큰 배열을 선언하여 모든 데이터를 그곳으로 옮긴다. ..
Array vs Linked List
·
CS 공부/자료구조
Array란? 특징 연관된 데이터를 메모리상에서 연속적이며 순차적으로 미리 할당된 크기만큼 저장하는 자료구조이다. 고정된 저장 공간 (fixed-size) 순차적인 데이터 저장 (order) 장점 - 접근(lookup)과 마지막 원소 추가/삭제가 O(1)로 빠르다. 단점 - 선언시에 크기를 미리 할당해야해서 메모리 낭비나 추가적인 오버헤드가 발생할 수 있다. ※ 미리 예상한 크기보다 더 많은 개수의 데이터를 저장하기 위한 해결방법은? => Dynamic Array 이용 기존의 size 보다 더 큰 array를 선언하여 데이터를 옮겨 할당한다. 모든 데이터를 옮겼다면 기존 array는 메모리에서 삭제한다. 이런식으로 동적으로 배열의 크기를 조절하는 자료구조를 Dynamic Array라고 한다. => Lin..
git filter-branch
·
개발도구/Git
최근에 다른 기업의 지인 개발자들을 만나서 개발 이야기를 하다가 그 기업의 팀장님은 git 마법사라며 filter-branch 같이 들어보지도 못한 git 기능들을 많이 알고 계신다면서 이야기를 듣게 되었다. filter-branch가 과연 뭘까 귀 기울여듣게 되면서 따로 집에 와서 찾아보게 되었다. 참고할만한 블로그도 몇 없어서 유투브 영상을 통해서 공부해보았다. 이를 공유하고자 글을 작성한다. filter-branch가 필요한 상황 2가지 1. 민감한 파일이 실수로 원격 저장소에 push 되었을 때 - 원격 저장소에 실수로 올린 파일을 지우고 다시 push를 하여도, 이전에 파일이 올라왔던 기록을 통하여 파일 확인이 가능해지므로 무용지물이 되어버리는데 이런 상황을 간단히 해결하고 싶을 때 사용함. 2..