HTTP의 특성에 대해서 알아보자. 📌Stateless (무상태)Stateless는 서버가 클라이언트의 상태를 저장하지 않는 HTTP의 특징이다. 그렇다면 Stateful(상태유지)하면 안될까? 왜 HTTP는 무상태의 특성을 갖는지 알아보자. 확장성 (Scalability)서버가 각 클라이언트의 상태를 유지하지 않으므로, 클라이언트의 수가 증가하더라도 서버의 복잡성이 크게 증가하지 않는다.여러 서버에 트래픽을 분산시키기 쉬워진다. 클라이언트의 상태를 유지할 필요가 없기 때문에 로드 밸런서를 통해 요청을 여러 서버로 분산할 수 있다.단순성 (Simplicity)각 요청이 독립적이므로, 서버는 각 요청을 독립적으로 처리할 수 있다. 이는 서버 구현을 단순하게 한다.클라이언트와 서버 간의 인터랙션이 단순해..
문제https://www.acmicpc.net/problem/2003 접근 방법만약 완전탐색으로 구할 경우 O(N^2) 시간 초과가 발생한다.따라서 N^2을 O(N) 으로 줄일 수 있는 투 포인터를 생각하여 문제를 구했다.s, e 둘다 0으로 시작하고, 값이 작으면 e를 증가, 값을 초과하면 s를 증가시켰다. 코드를 보는것이 더 이해하기 쉬울 것이다.코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; private static BufferedReader br; private..
문제https://www.acmicpc.net/problem/11728 접근 방법간단하게 Arrays.sort로 구하거나, PriorityQueue를 이욯하거나 해서 쉽게 구할 수 있었을 것이다.하지만 투포인터 방법으로 구해보았다.첫번째 배열에서 첫번째 항을 s 두번째 배열에서 첫번째 항을 e 로 두고 작은 부분을 Stringbuilder에 넣어주었다.두 배열중 먼저 끝 지점에 다다를시 배열 하나는 탐색이 다 완료가 되지 않았다는 말로 해당 포인터 부터 나머지 값을 넣어준다.근데 이 투포인터가 가능한 이유는 첫번째 배열과 두번째 배열이 모두 정렬이 되있기 때문에 가능한것이다. 만약 정렬되어 있지 않으면 불가능하다. (ex 첫번째 배열 1,4,2 두번째 배열 3)코드import java.io.Buffere..
3-Way Handshake는 TCP의 접속과정, 4-Way Handshake는 TCP 접속 해제 과정이지만 오늘은 접속 과정만 알아보겠다. 📌3-Way HandshakeTCP/IP 프로토콜을 이용해서 이용해서 응용프로그램은 데이터를 주고받기 전에 먼저 연결을 진행한다.(정확한 전송을 보장하기 위해)3-Way Handshake는 이 연결 과정을 의미한다.더보기TCP/IP 프로토콜은 하나의 프로토콜이 아닌 TCP와 IP를 합쳐서 부르는 말이다. TCP/IP를 사용하겠다는 것은 IP 주소 체계를 따르고 IP Routing을 이용해 목적지에 도달하여 TCP의 특성을 활용하여 송신자와 수신자의 논리적 연결을 생성하고 신뢰성을 유지할 수 있도록 하겠다는 것을 의미한다. 즉, 여기서 말하는 TCP/IP 프로토콜은..
문제https://www.acmicpc.net/problem/6219 접근 방법소수를 먼저 B범위 만큼 구해주고, 소수 안에서 D가 포함되어있는지 찾으면 되는 문제이다. 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; private static BufferedReader br; private static StringTokenizer st; private static int A,B; private static Strin..
문제https://www.acmicpc.net/problem/15996 접근 방법N이 팩토리얼로 주어졌을때 A로 최대 몇승까지 나눌수 있는지에 대한 문제이다.간단하게 N/A + N/(A*A) ...형식으로 K를 구할 수 있다.코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; private static BufferedReader br; private static StringTokenizer st; private static long N,A; private stat..
문제https://www.acmicpc.net/problem/9417 접근 방법정수 M이 주어졌을때 모든 두 쌍 중에서 가장 큰 최대공약수를 찾는 문제이다.M이 최대 99이므로 2쌍을 찾을때 완탐을 해도 N*10000의 경우의 수보다 작다.유클리드 호제 방법으로 문제를 쉽게 풀 수 있었다. 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Arrays;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; private static BufferedRead..
인터넷에서 네트워크를 공부하다 보면 항상 TCP/IP라고 말하는데 분명 다른 개념인데 왜 이렇게 말하는걸까? 라고 생각해본적이 있다. 그래서 확실하게 개념을 잡고자 정리를 해보았다. 📌 OSI 7계층OSI 모델은 네트워크에서 일어나는 통신을 7개의 계층으로 나눈 참조 모델이다. 이는 네트워크 프로토콜 설계 및 개발에 표준을 제공하기 위해 만들어졌다. 그럼 어떻게 OSI 7 계층이 만들어졌을까?네트워크의 시작 : 먼저 서로 다른 컴퓨터 사이에 정보를 주고 받을 수 있었다. 프로토콜의 발전 : 그러면서 자연스럽게 여러 회사에서 각각의 프로토콜(규칙)을 개발하게 되었다. -> 이때 통일된 규정이 없어 문제가 발생하였다. 서로 다른 언어들을 사용한다면 컴퓨터와 컴퓨터간 정보를 알아 들을 수 없게 되었다.표준의..
문제https://www.acmicpc.net/problem/1990 접근 방법문제에 나와있는대로 소수이면서 팰린드롬을 찾는 문제이다.그러면 먼저 소수를 찾아서 배열을 만들어 주고, A ~ B까지 순환하면서 그 수가 소수인지, 만약 소수이면 팰린드롬 검사를 해줘서 맞으면 모두 저장한다.그리고 마지막은 -1을 저장한다. 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;public class Main { private static StringBuilder sb; private static BufferedReader br; p..
문제https://www.acmicpc.net/problem/23888 접근 방법첫째줄에 A : 첫항, D : 공차둘째줄에 쿼리 갯수(테스트케이스 갯수)셋째줄에 1 L R 또는 2 L R 값으로 첫번째 값이 1이면 L~R 까지 등차수열의 합을 ,2이면 L~R까지 의 최대공약수를 구하는 문제이다.따라서 등차수열의 합은 공식을 이용해서 N*{(2A+(N-1)D}/2, 최대공약수는 유클리드 호제법을 이용하여 구한다. 그리고 2번째에서는 L과 R이 필요가 없는게 A와 A+d, ... A+(N-1)d로 이루어져있기 때문에 첫항과 둘째항의 최대공약수나 둘째나 셋째의 최대공약수나, 셋째나 넷째의 최대공약수나 다 똑같다.(유클리드 호제) 코드import java.io.BufferedReader;import java...