CS 공부 8

[네트워크] HTTP & HTTPS

프로토콜이란?컴퓨터 내부, 사이의 데이터 교환 방식을 정의하는 규칙이나 표준서로 다른 시스템, 장치들이 일관되게 통신할 수 있는 규칙을 정의해 데이터 형식, 전송 절차, 에러 처리 등 세부 사항을 결정한다. 즉, 의사소통을 원활하게 해주는 규칙!예시1. HTTP : 웹 데이터를 주고받을 때 사용2. FTP : 파일을 전송3. TCP/IP : 인터넷에서 데이터를 주고받기 위한 기본 프로토콜 스택4. SMTP : 이메일 전송을 위한 프로토콜 1. HTTP(HyperText Transfer Protocol)란?텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 동작. 상태를 가지지 않는 프로토콜이며 Method, Path, Version,..

[CS-네트워크] TCPvsUDP란? + 네트워크 기본 개념

네트워크 기본 개념1. 네트워크 목적 : 네트워크는 여러 장치들이 서로 연결되어 데이터를 주고받는 시스템이다.이를 통해 파일 공유, 인터넷 접속, 이메일 등 다양한 작업을 진행한다.2. 네트워크 장비Server : 서비스 제공 장치. 웹사이트 호스팅, 파일 저장, 데이터베이스 관리 등 담당Client : 서버에서 제공하는 서비스를 요청하는 장치. ex) 웹브라우저 통해 웹사이트에 접근하는 컴퓨터가 클라이언트Switch : 네트워크에서 데이터를 수신하고 목적지에 맞게 전달. 패킷을 수신 후 MAC 주소를 기반으로 적절 포트로 전송Router : 서로 다른 네트워크를 연결하고 패킷을 올바른 경로로 전달. ex) 집안의 인터넷 라우터는 LAN과 인터넷 WAN을 연결한다.Hub : 네트워크의 모든 장치에 데이터..

[CS-알고리즘] 병합 정렬에 대해서

병합 정렬이란?- 안정 정렬에 속하는 분할 정복 알고리즘의 하나.- 하나의 리스트를 두 개의 균등한 크기로 분할하고 부분 리스트를 정렬한 후 두 개의 정렬 리스트를 합하여 전체 정렬된 리스트가 되도록 하는 방법- 평균 및 최악의 경우에 O(n log n) 시간 복잡도를 가지며 공간 복잡도는 추가 배열을 위해 O(n)이다.병합 정렬의 과정Divide(분할) : 정렬할 배열을 두 개의 하위 배열로 나누고 나눌 수 없을 때까지 반복 (1개 또는 0개 요소를 가질 때까지)Cinquer(정복) : 각 하위 배열이 정렬될 상태로 만들어질 때까지병합 Combine(결합) : 두 개의 정렬된 하위 배열을 하나로병합 Java 예제import java.util.Arrays;public class Main { public ..

[CS-알고리즘] 삽입 정렬에 대해서

삽입 정렬(Insert Sort)삽입 정렬은 비교적 간단하고 직관적인 정렬 알고리즘이다.카드 정리와 비슷한 방식으로 작동하며 배열의 각 요소를 적절한 위치에 삽입하여 정렬을 완성한다.시간 복잡도는 이미 정렬된 경우 O(n), 평균 및 최악은 O(n²)간단하고 이해하기 쉬우나 큰 데이터셋에서는 성능이 좋지 않다.정렬된 부분 : 배열의 왼쪽부터 현재까지 정렬이 완료된 부분정렬되지 않은 부분 : 배열의 오른쪽 나머지 부분, 정렬 필요순서배열의 첫 요소는 이미 정렬된 것으로 간주두 번째 요소부터 각 요소를 정렬된 부분에 적절 위치 삽입이를 반복 예제public class InsertionSort { public static void insertionSort(int[] arr) { // 배열의 ..

[CS 알고리즘] 거품 정렬에 대해서

거품 정렬가장 간단한 정렬 알고리즘 중 하나 인접한 두 요소를 비교하여 순서가 잘못된 경우 교환하는 방식으로 정렬한다.가장 큰 요소가 점차 오른쪽 끝으로 이동하는 방식이 거품이 올라오는 모습과 비슷하다고 하여 거품 정렬이 되었다.동작 방식리스트의 처음부터 시작해서 인접한 두 요소를 비교만약 앞의 요소가 뒤의 요소보다 크다면 두 요소를 교환위의 과정을 리스트 전체가 정렬될 때까지 반복시간 복잡도최악의 경우: O(n²)최선의 경우: O(n) (이미 정렬된 경우)평균 경우: O(n²) 거품 정렬은 단순하고 구현하기 쉽지만, 성능이 좋지 않아 일반적으로 실무에서는 잘 사용되지 않는다. 대신 퀵 정렬, 병합 정렬 등의 더 효율적인 정렬 알고리즘이 사용됨..Java 예시바깥 for문 : i가 배열길이까지내부 for..

[CS 자료구조] 이진 트리에 대해서

기본 용어 정리Node(노드) : 트리의 각 요소Root(루트) : 최상단 노드Parent(부모) : 자식 노드를 가진 노드Child(자식) : 다른 노드의 자식Leaf(잎) : 자식이 없는 노드Subtree(서브트리) : 특정 노드를 루트로 하는 트리전위 순회(preorder traverse) : Root먼저 방문 (Root -> Left Child-> Right Child... )중위 순회(inorder traverse) : Left Child -> Root -> Right Child후위 순회(postorder traverse) : Left Child -> Right Child -> Root이진트리란?각 노드가 최대 두 개(0,1,2)의 자식을 가지는 트리 자료구조.효율적인 검색, 삽입, 삭제 연산을..

[CS 자료구조] Array, ArrayList, LinkedList

1. 배열 (Array)선언 시 크기를 고정. 메모리 할당이 정적으로 이루어져 이후에는 변경할 수 없다. ( JS에서는 동적으로 증감)메모리에 연속적으로 저장되어 인덱스를 통해 빠르게 접근이 가능동일한 데이터 타입 요소만 저장 가능정적 데이터 저장 시 유용 (ex: 요일 이름, 월 이름 등)인덱스를 통한 빠른 접근 시간 - O(1)간단한 구현크기 제한으로 인해 메모리 낭비 혹은 넘침 현상 발생중간에 요소 삽입 및 삭제 시 많은 요소를 이동시켜야 함 - O(n)인덱스를 가지고 탐색하는 과정을 거친다면 효율적이나 추가/삭제 시는 비효율 1) Java 예시public static void main(String[] args) { // int 자료형 배열 선언 및 초기화 int[] numbers = {..

[CS 자료구조] Heap에 대해서

힙(heap) 이란힙이란 최댓값, 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전 이진트리를 기본으로 한 자료구조다.우선순위 큐를 위해 만들어진 자료구조이다.우선순위 큐 (Priority Queue)큐는 FIFO(First In, First Out) 형식의 자료 구조.우선순위 큐는 먼저 들어오는 데이터가 아닌, 순위가 높은 데이터가 먼저 나가는 형태의 자료구조다. 힙을 이용하여 구현함insert(x) : 우선순위 큐에 요소 x 추가remove() : 우선순위 큐에서 가장 우선순위가 높은 요소를 삭제하고 반환find() : 우선순위 큐에서 가장 우선순위가 높은 요소를 반환완전 이진 트리(Complete Binary Tree) 기반의 자료구조 힙은 일종의 반정렬( 느슨한 정렬 ) 상태를 유지한다.큰 ..