전체 글 99

Back-End (2) : AWS를 이용해 내가 원하는 웹페이지 띄우기

AWS instance 접속 AWS에 nginx 설치 후 정적 서버 업로드 Domain Mapping mobaXterm 리눅스와 유닉스 시스템에서 사용되는 터미널 에뮬레이터(Terminal Emulator) *터미널 에뮬레이터 : 컴퓨터와 다른 장치를 연결하여 컴퓨터에서 명령어를 입력하고 출력할 수 있도록 해주는 소프트웨어 mobaXterm으로 AWS instance에 접속 (방법은 생략) AWS instance 접속 후, 한국 시간대인 KST로 변경 # sudo : 관리자 권한을 사용한다 $ sudo timedatectl set-timezone Asia/Seoul 웹 서버 소프트웨어 클라이언트에서 요청한 웹 페이지를 찾아서 해당 페이지를 응답으로 전송해주는 역할 웹 서버 소프트웨어의 여러 기능 포트 리..

IT_Study/Web 2023.03.01

Back-End (1) : 서버, IP, Port, TCP, 클라우드 개념 정리 및 AWS 인스턴스 생성 방법 정리

클라이언트 (Client) vs 서버 (Server) 클라이언트 - 서버 측에 요청을 보내는 사용자 측 컴퓨터 또는 디바이스 - 일반적으로 웹 브라우저가 클라이언트 역할을 수행 - 외부 API에 데이터 요청 → 서버에서 데이터 가져옴 → 웹 페이지에 HTML을 이용해 표시 서버 - 클라이언트(Client)의 요청에 응답하는 컴퓨터 시스템 또는 프로그램 - 웹에서 서버는 웹 페이지, 애플리케이션, 데이터베이스 등의 정보를 제공하고, 클라이언트로부터 요청을 받아서 처리 - 서버의 역할은 여러 가지가 있음 웹 서버 : Client 들에게 HTTP 문서를 전달 DB 서버 : Client 들의 DB 를 관리 게임 서버 : Client 들의 게임 데이터를 관리 & 처리 IP(Internet Protocol) 송신 ..

IT_Study/Web 2023.02.28

[C++] Bit operation, 구조체를 활용한 Map 사용법 정리

Bit Operation(비트 연산) 컴퓨터에서 데이터를 비트(0 또는 1) 단위로 조작하는 연산 주로 컴퓨터에서 비트맵, 마스크(mask), 효율적인 데이터 압축, 암호화 등에 사용 *비트(Bit) : "binary digit"의 줄임말로, 0 또는 1의 값을 가지는 이진수(binary number)의 한 자릿수를 나타냄. 비트 연산자(Bit operator) 1. AND 연산(&) 두 비트가 모두 1인 경우에만 1을 반환 #include using namespace std; int main() { int a = 10; // 1010 int b = 12; // 1100 // AND 연산 int c = a & b; // 1000 cout

IT_Study/C++ 2023.02.23

[C++] Dynamic Programming (동적 계획법) 정리

Dynamic Programming (동적 계획법) 복잡한 문제를 간단한 문제(sub-problems)로 쪼개어 해결하는 알고리즘 ❓ 피보나치 수열 문제 예시 DP table를 사용하기 위해서는 다음 두 가지 조건을 만족해야 한다. 1. Optimal Structure (최적 부분 구조) 1-a. 해당 문제를 작은 문제로 분할할 수 있어야 한다. F(5)를 구하기 위해서는 F(4)와 F(3)을 계산해야 한다. 따라서 F(5) 문제를 F(4)와 F(3)이라는 작은 문제로 나누어 해결할 수 있다. 1-b. 작은 문제의 해결 방법을 통해 큰 문제의 해결 방법을 구할 수 있어야 한다. 피보나치 수열에서 n번째 항을 계산하기 위해서는 (n-1)번째 항과 (n-2)번째 항의 합을 계산해야 한다. 예를 들어, n=6..

IT_Study/C++ 2023.02.21

[C++] Greedy Algorithm (욕심쟁이 알고리즘) 정리

Greedy 각 단계에서 가장 좋은 선택을 하는 방식으로 문제를 해결하는 방식 Greedy는 Approximation Algorithm이다. 항상 현재 단계에서 최적인 선택을 하는 것이 최종 결과도 최적임을 보장하지는 않지만, 대부분의 경우에는 빠르고 효율적인 결과를 제공 Greedy 기법을 쓸 수 있는 지 어떻게 확인? → 수학적으로 검증 가능 Greedy Choice Property 성립 Optimal Substructure 형태를 갖고 있음 Greedy 알고리즘의 접근방법 Selection (선택) 문제에서 가능한 선택지를 파악하고, 이를 선택할 때 기준이 될 가치 평가 기준을 설정 Validation (검증) - Greedy 조건 성립 여부 검증 알고리즘이 항상 최적해를 구하는지 검증하기 위해, ..

IT_Study/C++ 2023.02.20

[C++] Binary Search, Parametric Search, Two pointer 알고리즘을 활용한 문제 풀이 방법

Binary Search 정렬된 배열에서 원하는 항목을 빠르게 찾는 알고리즘 일반적으로 O(log n)의 시간 복잡도를 가짐 방법 Array가 정렬이 되어있는 지 확인 (미정렬 시 이분 탐색 사용 불가) 탐색하려는 배열의 중앙 값을 찾음 중앙 값이 찾으려는 값과 같은지 확인 만약 중앙 값이 찾으려는 값과 같다면, 탐색을 종료하고 인덱스 값을 반환 만약 중앙 값이 찾으려는 값보다 크다면, 배열의 왼쪽 반쪽을 새로운 배열로 간주하여 이진 탐색을 수행 이 때, 왼쪽 배열의 마지막 인덱스는 중앙 인덱스 - 1 만약 중앙 값이 찾으려는 값보다 작다면, 배열의 오른쪽 반쪽을 새로운 배열로 간주하여 이진 탐색을 수행 이 때, 오른쪽 배열의 첫 인덱스는 중앙 인덱스 + 1 찾으려는 값이 배열 내에 없다면, 탐색을 종료..

IT_Study/C++ 2023.02.19

[그래프 #6] MST (Minimum Spanning Tree)를 활용한 문제 풀이 방법

MST (Minimum Spanning Tree) 그래프의 모든 정점을 포함하면서, 가장 적은 비용으로 모든 정점을 연결하는 트리 MST 응용 분야 네트워크 설계(Network Design) MST는 여러 대상들 간의 연결을 최소 비용으로 설계하기 위해 사용 도시 간의 도로 연결이나, 컴퓨터 네트워크의 노드 연결 등에 사용됩니다. 클러스터링(Clustering) 그래프를 여러 개의 클러스터로 분할하고, 각 클러스터 간의 비용을 최소화하는 목적으로 사용 전기 회로(Electrical Circuit) 전기 회로에서 전선을 연결할 때, 최소한의 비용으로 전선을 연결하기 위해 사용 이미지 분할(Image Segmentation) 이미지 분할 알고리즘에서 인접한 픽셀을 연결하는 최소 비용 경로를 찾아서 이미지를 ..

IT_Study/C++ 2023.02.16

[그래프 #5] 유니온 파인드(Union Find) 알고리즘을 활용한 문제 풀이 방법

Union Find 여러 개의 원소를 서로 묶는 작업을 효율적으로 처리하기 위한 알고리즘 일반적으로 disjoint-set(서로소 집합) 자료구조를 구현하는 데 사용 과정 집합 내에서 어떤 두 원소가 같은 집합에 속해 있는지 여부를 판단 Union : 서로 다른 두 집합을 결합하는 작업 Find : 특정 원소가 속한 집합의 대표 원소를 찾아보는 작업 Union 작업 - O(N) void Union(int A, int B) { // A와 B의 부모를 확인 int root_A = Find(A); int root_B = FInd(B); // 둘이 다른 그룹이면, B의 그룹을 A의 산하로 넣을 것 if (root_A != root_B){ parent[root_B] = root_A; } } A, B의 부모를 확인..

IT_Study/C++ 2023.02.16

[그래프 #4] 다익스트라(Dijkstra) 알고리즘을 활용한 문제 풀이 방법

Dijkstra 최단 거리(shortest path)를 찾는 알고리즘 인접 리스트를 활용해야 시간복잡도, 공간복잡도가 줄어듦 최단 경로를 구하는 알고리즘 BFS : 가중치가 없는 그래프에서, 최단 경로를 구할 때 Dijkstra : 가중치가 있는 그래프에서, 최단 거리를 구할 때 Floyd-Warshall : 모든 노드 쌍 사이의 최단 거리를 구할 때 Bellman-Ford : 음수 가중치가 있는 그래프에서 최단 거리를 구할 때 For loop을 이용한 구현 - O(V^2) 과정 설명 구현 코드 #include #include using namespace std; struct Edge { int to; // 도착 노드 int cost; // 가중치 }; int N, M; // N : 노드의 개수, M :..

IT_Study/C++ 2023.02.15

[C++] STL : Sorting, Priority Queue 사용법 정리

SORT 특정 집합의 요소들을 특정 기준으로 나열하는 것 https://ko.wikipedia.org/wiki/정렬_알고리즘 STL에서 구현된 정렬 알고리즘 = 굉장히 “안정적” → STL에서 만들어진 정렬의 시간복잡도는 “항상” O(NlogN) 보장 C++에서 사용하는 정렬 = Intro sort (여러 정렬을 섞어 만든 알고리즘) Intro sort = Heap Sort + Insertion Sort + Quick Sort STL sort() 사용 방법 #include #include // 정렬이 필요하면 false, 정렬이 되어있으면 true if (left > right) // (우리가 원하는 상태) --> true return true; if (left < right) return false; ..

IT_Study/C++ 2023.02.13