본문 바로가기

전체 글

(112)
최장 공통 부분 수열 (Longest Common Subsequence, LCS) 최장 공통 부분 수열 (LCS) 문제는 두 개의 문자열이 주어졌을 때, 두 문자열에서 순서를 유지하며 공통으로 나타나는 가장 긴 부분 수열을 찾는 문제이다. 부분 수열(subsequence)은 원래 문자열에서 순서를 유지하면서 일부 문자를 선택하여 만든 새로운 문자열이며, 문자가 반드시 연속할 필요는 없다.예시두 문자열 A = "ABCBDAB"와 B = "BDCAB"가 주어졌을 때:A에서 "BCAB"가 B에서의 "BCAB"와 일치한다.이때 최장 공통 부분 수열은 "BCAB"이며, 그 길이는 4이다.LCS 문제의 이론적 배경LCS 문제는 다음과 같은 특성을 가지고 있다:최적 부분 구조 (Optimal Substructure):문제의 최적 해가 그 하위 문제의 최적 해로 구성될 수 있는 성질이다. 즉, 두 ..
TCP 와 UDP TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)는 인터넷에서 데이터를 전송하기 위해 사용되는 두 가지 주요 프로토콜이다. 이 두 프로토콜은 모두 IP(Internet Protocol) 위에서 동작하며, 서로 다른 방식으로 데이터를 전송한다. 1. TCP (Transmission Control Protocol)TCP란?TCP는 연결 지향적(Connection-oriented) 프로토콜로, 데이터의 신뢰성을 보장하는 프로토콜이다. 패킷 손실, 중복 패킷, 순서가 잘못된 패킷 등의 문제를 처리하여 데이터를 안전하게 전달한다.TCP는 데이터를 스트림(Stream) 형태로 전송하며, 흐름 제어 및 혼잡 제어 기능을 가지고 있어 네트워크 환경에서..
Blocking과 Non-blocking Blocking과 Non-blocking은 프로그램이나 시스템에서 작업이 완료될 때까지 대기하는지 여부에 대한 중요한 개념이다. 이 두 개념은 주로 I/O(입출력) 작업, 스레드, 네트워크 통신과 같은 상황에서 사용된다. 이 개념들을 이해하는 것은 프로그램의 성능, 응답성, 자원 사용에 큰 영향을 미치기 때문에 중요하다. 1. Blocking (블로킹)Blocking이란?Blocking은 어떤 작업이 완료될 때까지 해당 작업이 끝날 때까지 프로세스나 스레드가 대기하는 방식을 의미한다. 작업이 완료되기 전까지 다른 작업을 수행하지 않고, 해당 작업이 끝난 후에야 다음 작업으로 넘어갈 수 있다.보통 입력이나 출력(I/O) 작업에서 많이 사용되며, 네트워크 통신, 파일 시스템 접근, 스레드 동기화 등 다양한 ..
경쟁 조건(Race Condition)과 교착 상태(Deadlock) 경쟁 조건(Race Condition)과 교착 상태(Deadlock)는 멀티스레드 또는 멀티프로세스 환경에서 자주 발생하는 동시성 문제이다. 이 두 개념은 동시성 프로그래밍에서 데이터의 무결성과 시스템의 안정성을 위협할 수 있는 중요한 문제이다. 1. 경쟁 조건 (Race Condition)경쟁 조건이란?경쟁 조건은 두 개 이상의 스레드 또는 프로세스가 동시에 공유 자원에 접근하여, 그 실행 순서에 따라 프로그램의 결과가 달라질 수 있는 상황을 말한다. 즉, 여러 스레드나 프로세스가 동일한 자원을 동시에 접근하고 수정하는 경우, 그 결과는 실행 순서에 의해 비정상적인 상태로 변할 수 있다.경쟁 조건의 발생 원인경쟁 조건은 일반적으로 공유 자원에 대한 비동기적 접근으로 인해 발생한다. 여러 스레드가 동시에..
0-1 배낭 문제 (0-1 Knapsack Problem) 0-1 배낭 문제는 NP-완전 문제 중 하나로, 주어진 아이템 중에서 최대 가치를 얻을 수 있도록 배낭에 담는 방법을 찾는 문제이다. 각각의 아이템은 특정한 무게와 가치가 있으며, 배낭은 최대 무게 제한이 있다. 아이템을 쪼갤 수 없기 때문에, 각 아이템을 넣거나 넣지 않는 선택을 해야 하며(즉, 0 또는 1로 선택), 이를 최적화하는 방식이다.문제 정의:N개의 아이템이 있고, 각 아이템은 무게 weights[i]와 가치 values[i]를 가진다.배낭의 용량 W는 한정되어 있으며, 이보다 무게가 큰 아이템들은 넣을 수 없다.목표는 배낭에 담을 수 있는 최대 가치를 구하는 것이다.예시:아이템이 다음과 같다고 가정해 본다:아이템 1: 무게 2, 가치 3아이템 2: 무게 3, 가치 4아이템 3: 무게 4, ..
프로세스(process)와 스레드(thread) 프로세스(process)와 스레드(thread)는 컴퓨터 프로그램의 실행 단위로, 운영 체제(OS)가 프로그램을 실행하고 관리하는 중요한 개념이다. 프로세스와 스레드는 서로 다른 개념이지만, 긴밀하게 연관되어 있으며, 둘 다 병렬 처리나 멀티태스킹 환경에서 중요한 역할을 한다. 1. 프로세스 (Process)프로세스란?프로세스는 메모리에서 실행 중인 프로그램이다. 프로그램은 디스크에 저장된 정적인 파일이며, 프로세스는 이 프로그램이 실행되었을 때 생성되는 동적인 실행 단위이다.운영 체제는 각 프로그램이 독립적인 실행 환경을 가지도록 프로세스를 생성하고, 프로세스는 해당 프로그램이 동작하는데 필요한 자원을 할당받는다. 이러한 자원에는 CPU 시간, 메모리 공간, 파일 입출력 핸들 등이 포함된다.프로세스의 ..
동적 프로그래밍 (Dynamic Programming, DP) 동적 프로그래밍(DP)은 복잡한 문제를 작은 하위 문제로 분할하여 해결하고, 그 결과를 재사용함으로써 효율적으로 문제를 해결하는 알고리즘 기법이다. 기본적으로 동일한 문제를 여러 번 풀지 않도록 중복된 계산을 줄이는 데 중점을 둔다.동적 프로그래밍은 최적화 문제에 많이 사용되며, 특히 최소값, 최대값 또는 경로 탐색과 같은 문제에서 자주 등장한다. DP는 하위 문제의 결과를 저장(Memoization 또는 Tabulation)해두고, 이를 기반으로 더 큰 문제를 해결하는 방식으로 진행된다.DP 문제를 해결하는 핵심 개념중복되는 하위 문제 (Overlapping Subproblems):문제를 재귀적으로 해결할 때, 동일한 하위 문제를 여러 번 해결하는 경우가 많다. 동적 프로그래밍은 이러한 하위 문제의 결..
HTTP와 HTTPS HTTP와 HTTPS는 웹에서 데이터를 전송하는 데 사용되는 두 가지 프로토콜이다. 이 두 프로토콜은 많은 면에서 유사하지만, 보안 측면에서 큰 차이가 있다.1. HTTP (HyperText Transfer Protocol)HTTP는 인터넷 상에서 데이터를 전송하는 프로토콜이다. 주로 웹 브라우저와 웹 서버 간의 데이터 통신을 관리하며, 텍스트, 이미지, 비디오와 같은 다양한 콘텐츠를 전달하는 데 사용된다.특징데이터 비암호화: HTTP로 전송되는 데이터는 암호화되지 않으며, 평문(plain text)으로 전송된다. 즉, 중간에서 누군가가 트래픽을 가로채면 쉽게 데이터를 읽을 수 있다.기본적인 데이터 전송: HTTP는 기본적으로 데이터를 주고받는 간단한 프로토콜이다. 그러나 데이터의 무결성, 기밀성, 인증..

728x90