본문 바로가기

CS

(25)
[자료구조] Stack - 1 Stack : LIFO ( Last in, First Out) stack은 데이터를 저장하고 관리하는 선형 자료구조로, "Last In, First Out" (LIFO) 원칙을 따르는 구조입니다. LIFO 원칙은 마지막에 추가된 데이터가 가장 먼저 제거되는 것을 의미합니다. 스택의 예시로는 일상 생활에서 쌓아놓은 책 더미나 접시를 생각하면 쉽습니다 주요 연산 push(item): 스택에 요소를 추가합니다. pop(): 스택의 가장 위에 있는 요소를 제거하고 반환합니다. peek(): 스택의 가장 위에 있는 요소를 반환하지만 제거하지 않습니다. isEmpty(): 스택이 비어있는지 여부를 확인합니다. isFull(): 스택이 최대 용량에 도달했는지 여부를 확인합니다. 장점 간단한 구조: 스택은 간단한 구조..
[자료구조]Linked list - 몇가지 구현 JS 공부하고 참고하면서 몇가지 문법들 작성하였습니다. 아직 코테를 풀기에는 부족한거같아서 노력하자(그냥 혼자 보려고 하는 코드) class Node{ constructor(data,next = null){ this.data =data this.next=next } } class LinkedList{ constructor(){ this.head=null this.size = 0 } addFirst(data){ this.head = new Node(data,this.head) this.size++ } addLast(data){ let node = new Node(data) let current if(!this.head){ this.head = node }else{ current = this.head while(..
[알고리즘] 문제 해결 패턴 - 기본: Divied and Conquer 3. Divied and Conquer 분할 정복(Divide and Conquer)"은 어려운 문제를 해결하기 위해 문제를 더 작은 부분으로 나누고, 나눠진 부분을 각각(재귀적으로) 해결하여 원래 문제의 해답을 얻는 알고리즘 디자인 패러다임입니다. 이 패러다임은 문제를 작은 부분으로 쪼개서 해결하는 것을 강조 가장 대표적인 예로 “Binary Search”가 있습니다. 이 외에도 Merge Sort(병합 정렬), Quick Sort(퀵 정렬), Binary Search(이진 검색) 등이 있습니다. 일반적으로 "분할", "정복", "결합" 단계로 구성됩니다. 분할(Divide): 복잡한 문제를 해결하기 쉬운 작은 부분으로 나눕니다. 이 단계에서는 문제를 더 작은 부분으로 분해하고, 각 부분에 대한 해법..
[알고리즘] 문제 해결 패턴 - 기본: Slide Window 2. Slide Window 연속된 데이터(주로 배열이나 리스트)에서 일정한 크기의 구간(윈도우)을 움직이며 문제를 해결하는 패턴입니다. 윈도우의 크기가 고정된 경우와 가변적인 경우가 있습니다. 배열이나 문자열 같은 일련의 데이터를 입력하거나 특정 방식으로 연속적인 해당 데이터의 하위 집합을 찾는 경우에 유용한 패턴입니다. 대표적인 문제 예시 : LeetCode - Minimum Size Subarray Sum 주어진 양수로 이루어진 배열에서 연속된 부분 수열 중 원하는 합 이상을 만족하는 최소 길이의 부분 수열을 찾는 문제입니다. data example 1 Input: target = 7, nums = [2,3,1,2,4,3] Output: 2 data example 2 Input: target = 1..
[자료구조] Linked list - 1 Linked List는 데이터를 순서대로 저장하는 자료구조입니다. 각 데이터 요소는 노드(Node)라고 불리는 객체로 표현됩니다. 각 노드는 데이터와 다음 노드를 가리키는 포인터(링크)로 구성됩니다. 링크드 리스트는 노드들이 서로 물리적으로 연속되어 있지 않아도 되며, 각 노드는 독립적으로 존재하면서 다음 노드로의 연결 정보를 가지고 있습니다. js로 표현한 연결 리스트(단일 연결 리스트) const list = { head: { value: 6 next: { value: 10 next: { value: 12 next: { value: 3 next: null } } } } } }; 장점: 연결 리스트는 요소 추가 및 삭제가 간편하며, 배열에 비해 메모리 사용이 유연합니다. 단점: 연결 리스트는 요소를 찾..
[알고리즘] 문제 해결 패턴 - 기본: Two Pointers 1. Two Pointers 배열이나 리스트 같은 선형데이터 구조에서 사용 두개의 포인터를 동시에 움직여 가며 해결 한쌍의 값이나 조건을 충족시키는 무언가를 찾는 문제 ex) 정렬된 배열 주어졌을때, sum라는 함수 작성 함수는 합이 0이되는 첫번째쌍을 찾아야함 대표적인 문제 예시 : LeetCode - Container With Most Water 주어진 배열에서 두 개의 세로선과 x축이 이루는 면적이 최대가 되는 값을 찾는 문제입니다. 즉, 각 세로선의 높이를 요소로 갖는 배열이 주어졌을 때, 두 개의 세로선과 x축으로 이루는 가장 큰 면적을 찾는 문제입니다. data example 1 Input: height = [1,8,6,2,5,4,8,3,7] Output: 49 data example 2 In..
[알고리즘] Big 0 표기법 Big O 표기법? 알고리즘의 효율성을 설명하는데 사용되는 수학적 표기법. 알고리즘의 시간 복잡도와 공간 복잡도를 분석하고 비교하기 위해 사용됩니다. 이 표기법은 알고리즘의 실행 시간이나 필요한 메모리 공간이 입력 크기에 어떻게 변화하는지를 설명하는데 도움을 줍니다. 시간복잡도란 시간 복잡도는 알고리즘이 어떤 문제를 해결하는 데 얼마나 많은 시간이 걸리는지를 나타내는 척도입니다. 1. O(1) - 상수 시간(complete in constant time) - 알고리즘이 입력 크기에 상관없이 일정한 실행 시간을 가지는 경우입니다. 가장 효율적인 경우입니다. function constantTimeExample(arr) { return arr[0]; // 첫 번째 요소 반환, 입력 크기에 상관 없이 항상 1번..
HTTP & HTTPS HTTP, HTTPS는 프로토콜이다. 인터넷을 통해 데이터를 주고받는 둘의 큰 차이점은 전송하는 데이터의 암호화이다. HTTP : 데이터를 암호화 하지 않는다. 보안 인증이 없음으로 서버의 신원을 검증하지 못함 HTTP는 기본 stateless프로토콜이므로, 세션을 관리하기 위해 쿠키와 같은 메커니즘 필요 HTTPS : 데이터를 SSL/TLS프로토콜을 사용해 암호화 시킨다. SSL/TLS인증서 사용하여 서버의 신원을 인증 기본 stateless이지만, 보안을 위해 쿠키와 세션에 대한 추가적인 보호기능 사용 SSL (Secure Sockets Layer)과 TLS (Transport Layer Security)는 암호화와 보안을 제공하는 프로토콜로, 인터넷을 통해 데이터를 안전하게 전송하는 데 사용됩니다...