TCP 일반적으로 TCP와 IP를 함께 사용하는데, TCP는 패킷 추적 및 관리를 담당하고 IP가 데이터의 배달을 담당합니다. 신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜입니다. 사전에 3-way handshake 과정을 통해 연결을 설정하고 통신을 시작합니다. 4-way handshake 과정을 통해 연결을 해제합니다. (가상 회선 방식) 흐름 제어, 혼잡 제어, 오류 제어를 통해 신뢰성을 보장하지만 이 때문에 UDP보다 전송 속도가 느립니다. 데이터의 전송 순서를 보장하며 수신 여부를 확인할 수 있습니다. 대부분의 웹 HTTP 통신, 이메일, 파일 전송 등에 사용됩니다. 흐름 제어 송신 측과 수신 측 사이의 데이터 처리 속도를 해결하기 위한 기법입니다. 만약 송신 측의 전송량 > 수신 측..
문제 https://www.acmicpc.net/problem/2096 2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicpc.net 설명 다음 줄로 내려갈 때에는 바로 아래의 수로 넘어가거나, 아니면 바로 아래의 수와 붙어 있는 수로만 이동할 수 있다. DP만 사용해 문제를 풀면 모든 숫자를 배열로 담고 활용해야 하므로 메모리 제약에 걸린다. 따라서, 슬라이딩 윈도우 알고리즘을 같이 사용하면 dp 배열을 계속해서 초기화하면서 문제를 풀 수 있다. 먼저 처음에 maxDP와 minDP를 첫 줄의 숫자들로 초기화한다. 다음 줄부터 들어갈 m..
투 포인터 리스트에서 원하는 값을 얻기 위해 두 개의 포인터를 이용해 각 위치를 기록하면서 처리하는 알고리즘이다. 반복문을 사용해 리스트를 단순 탐색하는 것보다 투 포인터를 사용하면 시간 복잡도를 낮출 수 있다. 리스트의 크기가 N일 때, Worst Case일 경우 시간복잡도를 알아보자. 전자의 경우에는 반복문을 N번씩 두번 돌려서 시간복잡도는 \(O(N \times N) = O(N^2)\) 이 된다. 후자의 경우에는 두 포인터가 모두 N번 탐색하여 시간복잡도는 \(O(2N) = O(N)\) 이 된다. 투 포인터는 위의 그림처럼 두 가지 방식으로 쓰인다. 앞에서부터 시작하는 포인터와 끝에서부터 시작하는 포인터가 중간에서 만나는 방식 둘 다 앞에서 시작해서 하나의 포인터가 다른 포인터보다 앞서면서 끝에 도..