본문 바로가기

전체 글92

[Algorithm] Sorting Algorithm(정렬 알고리즘) - Comparison 프로그래밍을 할 때 배열은 라이브러리를 통하여 손쉽게 정렬할 수 있다. 하지만 정렬은 다양한 기법을 통해 수행할 수 있고 그 알고리즘에 따라 장단점이 존재한다. 아래는 통상적으로 원소의 크기를 비교하여 정렬을 할 때 사용하는 목록이다. 1. Bubble Sort(거품 정렬) : 배열에서 인접한 두 개의 원소를 비교하며 우열을 가린 뒤 서로 위치를 바꾸어 주는 방식이다. 거품 정렬을 통해 배열을 한 번 검사하면 필연적으로 가장 큰 수가 배열의 맨 끝으로 이동하게 되고 정렬이 완성될 때까지 반복한다. 두 개 원소의 위치만 계속 바꾸는 정렬이기 때문에 공간 복잡도는 O(1)을 가지지만, n개의 원소의 배열을 전부 정렬하는데 n번을 순회할 수 있기 때문에 시간 복잡도는 O(n^2)를 가진다. 2. Selecti.. 2023. 1. 3.
[Data-Structure] Stack, Queue, Deque Stack과 Queue는 선형 자료구조의 특징을 공통적으로 가지고 있다. Stack : Last In First Out (LIFO) - 후입 선출 (후에 들어간 원소가 먼저 배출) First In Last Out (FILO) - 선입 후출 (먼저 들어간 원소가 나중에 배출) 이것은 Stack의 가장 큰 특징이며 차곡차곡 쌓이는 구조로 이해하면 된다. 그렇기에 늦게 들어간 녀석들은 점차 쌓이게 되고 호출 시 가장 위에 있는 원소가 나오는 구조이다. ex ) 바구니에 물건을 담았다가 위에서부터 꺼냄 Queue : First In First Out (FIFO). - 선입 선출 (먼저 들어간 원소가 먼저 배출) Stack과 다르게 들어간 원소가 쌓이는 것은 마찬가지이나 들어간 순으로 배출된다는 것이 특징이다. .. 2022. 12. 27.
[Data-Structure] Array, Linked-List Array : 배열이라는 뜻의 Array는 가장 기초적인 자료구조 형식으로, 논리적/물리적 저장 위치가 동일하다는 특징을 가지고 있다. 접근 (Access) : 위치 정보를 나타내는 인덱스(Index)를 이용하여 해당 원소에 바로 접근이 가능하다. 접근에 대한 시간 복잡도는 O(1)이라는 특성을 가지고 있는데 이는 삽입(Insert)/삭제(Delete)는 다른 결과를 보여준다. 삽입(Insert) / 삭제 (Delete) : [0,1,2,3,4,5,6,7,8,9] 이라는 Array에 '5' 라는 원소에 접근을 하여 삭제를 하게 된다면 [0,1,2,3,4, ,6,7,8,9] 이와 같이 바뀌게 되는데 '4'와 '6' 사이에 어떠한 값이 들어간 것이 아닌 빈 공간이 생겨버리게 된다. Array의 특성 상 빈 .. 2022. 12. 24.
[Database] ORM(Object-Relational Mapping) ORM (Object-Relational Mapping) : 객체와 관계형 데이터 베이스의 데이터를 자동으로 매핑해주는 것을 의미 Java와 같은 객체 지향 프로그래밍 언어들은 클래스를 선언하여 인스턴스에 정보를 저장하는 것처럼 관계형 데이터 베이스는 테이블을 생성하고 스키마를 기반으로 인스턴스에 정보를 저장한다. 여기서 클래스와 테이블은 모델 간의 불일치가 존재하고, 이를 ORM을 통해 객체 간의 관계를 바탕으로 Query문을 자동으로 생성하여 불일치를 해결한다. ORM의 간단한 예시로 SQL query문과 Python의 웹 프레임워크인 Django의 queryset을 비교해볼 수 있다. Example : # SQL SELECT ID FROM USER WHERE AGE = 50; 이는 SQL query.. 2022. 12. 23.
[Network] Cross-Origin Resource Sharing (CORS), Same-Origin Policy (SOP) 1. SOP (Same-Origin Policy) Cors를 이해하기 앞서 SOP라는 정책에 대하여 이해할 필요가 있다. 프로토콜, 호스트 및 포트가 같은 경우 URL은 동일한 출처를 가지고 있는 URL로 정의할 수 있다. https://ssnotebook.tistory.com의 각 부분 예시 - 프로토콜 : https - 호스트 : ssnotebook.tistory.com - 포트 : 생략 (http://127.0.0.1:80이라는 주소에서 :80의 부분에 해당) 위의 기준으로 3가지 조건이 같지 않다면 다른 출처를 뜻하게 되는 것이며, 특정 출처를 가진 자원과 다른 출처를 가진 자원(문서 또는 스크립트)이 상호작용 하지 못하도록 요청 발생을 제한하는 정책이 SOP이다. CSRF(Cross-Site R.. 2022. 12. 16.
[CS] Base64 (Encode/Decode) 1. 인코딩(Encoding) / 디코딩(Decoding) 인코딩(Encoding) : 파일에 저장된 정보의 형태나 형식을 특수한 목적(데이터 표준화, 보안 등)을 위해서 일정 규칙에 따라 다른 형태로 변환하는 행위 (암호화 또는 부호화라고도 불림) 디코딩(decoding) : 인코딩에 의해 변환된 데이터를 변환되기 전 기존의 데이터로 변환시키는 행위 (복호화라고도 불림) 2. Base64 Base64 : 2진수(Binary)로 이루어진 8bit 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 문자로 표현하기 위해 만들어진 인코딩 방식이며 64진법을 기반으로 사용한다. 3. 인코딩 과정 1. 원본 문자 -> 문자를 ASCII 기반의 8bit binary(2진수)로 변환 ex) 'A' -> [10진.. 2022. 11. 30.