본문 바로가기

CS 공부44

스택(Stack) 두 개로 큐(Queue) 구현하기 구현방법 큐를 입력할 때에는 하나의 스택의 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.. 2023. 8. 8.
원형큐(Circular Queue)란? 탄생계기 rear이 가르키는 포인터가 배열의 마지막 인덱스를 가르키고 있을 때 앞쪽에서 Dequeue로 발생한 배열의 빈 공간을 활용할 수 없다는 선형 큐의 문제점을 보완하기 위한 자료구조이다. 기본 동작 - 포인터 증가 방식이 (rear+1)%arraysize 형식으로 변환하기 때문에 배열의 첫 인덱스부터 다시 데이터의 삽입이 가능해진다. Enqueue - rear+1이 배열의 끝이고 포화상태가 아니라면 데이터 삽입을 진행한다. - (rear+1)%arraysize == front 라면 배열이 포화상태이다. (포화상태 여부를 판단하기 위해 배열의 1칸은 비워둠) Dequeue - front+1의 위치의 데이터를 배열에서 가지고온다. - 배열이 공백상태가 아니라면 데이터 삭제를 진행한다. - rear==.. 2023. 8. 7.
Queue & Stack Queue란? 특징 - Queue의 사전적 의미는 줄, 혹은 줄을 서서 기다리는 것을 의미한다. - 선입선출(FIFO - First In First Out) 의 자료구조이다. → 먼저 넣은 데이터가 먼저 나온다. - 그러므로, 순서대로 처리해야할 때 사용한다. - 데이터를 추가하는 Enqueue / 데이터를 추출하는 Dequeue 연산이 있다. Enqueue - 맨 뒤에 데이터를 추가하면 되기 때문에 O(1)이다. (rear포인터 이용) Dequeue - 맨 앞의 데이터를 삭제하면 되기 때문에 O(1)이다. (front포인터 이용) 큐의 가장 첫번째 데이터를 front / 가장 마지막 데이터를 rear로 가리킨다. 접근방법은 front/rear로만 가능하다. - 활용 예시로는 하나의 자원을 공유하는 프린.. 2023. 6. 24.
Dynamic Array란? 배경 ※ Static Array의 한계점을 보안하기 위해.. Array의 경우 size가 고정되었기 때문에 선언시에 설정한 size보다 많은 데이터를 저장할 수 없다. (Static Array의 한계점) 이를 보안하기 위해 저장공간이 가득 차게되면 resize하여 유동적으로 array의 size를 조절할 수 있는 자료구조가 나왔다. 이를 Dynamic Array라 한다. Resize란? 데이터를 계속 추가하다가 기존에 할당된 메모리를 초과하였다. size를 늘린 배열을 선언한다. 그곳으로 모든 데이터를 옮긴다. 늘어난 크기의 size를 가진 배열이 된다. 이로써 새로운 데이터를 저장할 수 있게 된다. -> 데이터를 추가하다가 한계가 도달하는 시점에 더 큰 배열을 선언하여 모든 데이터를 그곳으로 옮긴다. .. 2023. 6. 24.
Array vs Linked List Array란? 특징 연관된 데이터를 메모리상에서 연속적이며 순차적으로 미리 할당된 크기만큼 저장하는 자료구조이다. 고정된 저장 공간 (fixed-size) 순차적인 데이터 저장 (order) 장점 - 접근(lookup)과 마지막 원소 추가/삭제가 O(1)로 빠르다. 단점 - 선언시에 크기를 미리 할당해야해서 메모리 낭비나 추가적인 오버헤드가 발생할 수 있다. ※ 미리 예상한 크기보다 더 많은 개수의 데이터를 저장하기 위한 해결방법은? => Dynamic Array 이용 기존의 size 보다 더 큰 array를 선언하여 데이터를 옮겨 할당한다. 모든 데이터를 옮겼다면 기존 array는 메모리에서 삭제한다. 이런식으로 동적으로 배열의 크기를 조절하는 자료구조를 Dynamic Array라고 한다. => Lin.. 2023. 6. 24.
HTTP&HTTPS HTTP(HyperText Transfer Protocol) 인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약이다. HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다. 이런 보안 문제를 해결해주는 프로토콜이 'HTTPS' 이다. HTTPS(HyperText Transfer Protocol Secure) 인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약이다. HTTPS는 텍스트를 암호화한다. (공개키 암호화 방식으로) HTTPS 통신 흐름 애플리케이션 서버(A)를 만드는 기업은 HTTPS를 적용하기 위해 공개키와 개인키를 만든다. 신뢰할 수 있는 CA 기업을 선택하고,.. 2022. 9. 11.