목록분류 전체보기 (78)
우보천리 개발

TCP 3-way Handshake TCP가 연결지향형인 이유는 데이터를 보내기 전, A와 B는 3-way handshake를 통해 연결을 확인하기 때문이다 연결이 수립된것을 확인하고 데이터를 받을 준비가 되었는지 확인 과정 SYN 비트를 1로 설정한 특별한 SYN 세그먼트와 최초의 임의의 순서번호(client_isn)를 선택하여 TCP 세그먼트에 넣어 연결을 요청 서버역시 SYN=1 비트와 client가 보낸 시퀀스번호(client_isn)에 +1 한 값을 ACK 해준다. 거기에 더해 서버의 시퀀스를 보낸다(server_isn) 클라이언트는 연결을 승인하며 SYN=0으로 보내고 server_isn + 1 값을 보내며 연결 승인을 확인. 이 단계에서는 세그먼트 내 데이터를 포함시킬 수 있다.
인터넷 애플리케이션에서 제공하는 두가지 프로토콜 UDP(User Datagram Protocol)과 TCP(Transmission Control Protocol)이 있다 애플리케이션 계층에서 내려온 데이터는 UDP 혹은 TCP 프로토콜의 헤더가 붙어 Segment로 만들어진다. 1. User Datagram Protocol 비신뢰적, 비연결형이다. 데이터 패킷을 전송할 때 연결설정하는 과정 없이 바로 전송(TCP와 다르게 핸드쉐이킹 과정 없음) - 비연결형 헤더에 최소한의 오류검출을 위한 체크섬필드가 존재. 그 이상 없음 - 비신뢰적 흐름제어, 혼잡제어 없음 메시지가 제대로 전달되었는지 확인 안함 헤더의 길이는 32비트(8바이트) / TCP는 20바이트인것을 생각하면 패킷 오버헤드가 낮음 오버헤드가 낮기..
Application Layer 네트워크 애플리케이션의 핵심 포인트는 end-device 사이에서 네트워크로 통신 실제로 통신하는 것은 프로세스(Process) Process는 Socket을 통해 네트워크로 메시지를 주고 받는다. 그래서 Socket은 App Layer과 Transport Layer 사이의 인터페이스 메시지를 교환하려면 어디로 보내야하는지 알아야한다 -> IP 메시지를 받은 호스트 내에서 어떤 프로세스가 수신해야하는지 알아야한다 -> Port Number (ex. Web server : 80) Client - Server 구조에서 Server는 고정IP 를 갖고 있는 항상 동작하고 있음 Client끼리는 통신하지 않음 두개의 프로세스에서 세션을 시작하기 위해서 접속을 기다리는 프로세스를 ..
프로그래머스 게임 맵 최단거리 https://school.programmers.co.kr/learn/courses/30/lessons/1844?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 최단거리이기 때문에 BFS 알고리즘 사용 캐릭터가 한칸 갈때마다 기존의 위치에서 +1을 해주면 총 이동한 거리가 된다 이동가능한 좌표(상, 하, 좌, 우) 에 대해서 벽인 경우에는 넘어가고 벽이 아닌경우에는 진행한다 하지만 좌표가 게임 맵 (n x m) 을 벗어나면 안되니 해당하는 경우도 넘어간다 게임 맵 안에 있고, 벽이 아닌경우 해..
프로그래머스 단어 변환 https://school.programmers.co.kr/learn/courses/30/lessons/43163?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 가장 짧은 변환 과정을 반환해야 하기 때문에 깊이 우선 탐색보다는 넓이 우선 탐색 BFS를 사용하는게 더 알맞다고 생각했다 큐에 단어와 몇번째 변환인지 저장하기 위해서 별도의 클래스를 정의했다 확인해야할 점은 한번에 하나의 단어만 변환할 수 있기 때문에 변환할 수 있는 단어인지 우선 확인해야한다 그렇기에 isConvert 함수를 통해서 다른..
프로그래머스 네트워크 https://school.programmers.co.kr/learn/courses/30/lessons/43162?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 DFS를 통해서 하나의 컴퓨터와 다른 컴퓨터가 네트워크에 연결 되어있는지 확인한다 같은 컴퓨터를 두번 방문하는 것을 피하기 위해서 방문 배열 visited[] 를 만들어서 체크한다 방문 배열을 돌면서 방문하지 않은 컴퓨터에 대해서 DFS를 수행한다 DFS 함수 안에서는 해당 컴퓨터를 방문 처리하고, 그 컴퓨터가 방문되지 않고, 연결 되어있는..
프로그래머스 타겟 넘버 https://school.programmers.co.kr/learn/courses/30/lessons/43165?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 DFS(깊이 우선 탐색) 을 활용해서 모든 경우의 수를 탐색해본다 깊이가 배열의 길이보다 커지면 스택오버플로우가 발생하기 때문에 DFS깊이가 배열의 크기와 같을 때 확인한다 크기가 같고 우리가 찾는 숫자인 'target' 이라면 count++ 증가 시킨다 그렇지 않으면 depth + 1 로 늘려주고, 배열의 다음숫자를 더하고, 뺄셈을 하여..
백준 2110 공유기 설치 https://www.acmicpc.net/problem/2110 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net 아이디어 집의 좌표가 입력으로 최대 10억개 들어올 수 있기에 시간초과에 걸릴 수 있다 이진탐색을 사용하면 매번 데이터의 개수를 절반으로 줄일 수 있기 때문에 이분탐색으로 풀어나간다 우선 좌표를 오름차순으로 정렬해야 이진탐색 가능 공유기 사이의 최소길이는 1이다. 최대길이는 배열의 가장 큰 값이다 공유기 배치를 주어진 ..
백준 1715 카드 정렬하기 https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 아이디어 카드를 최소한의 비교로 합치기 위해서는 매번 묶음의 개수가 가장 적은 것들을 더해주면 된다 우선순위큐를 사용하여 매번 가장 낮은 숫자들을 더하면 결과를 확인할 수 있다 코드 import java.util.*; class BJ1715 { public static void main(String[] args) { Scanner sc = new Scan..
42889 프로그래머스 카카오 기출 실패율 https://school.programmers.co.kr/learn/courses/30/lessons/42889 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 실패율을 구하는 공식은 스테이지 클리어 못한 플레이어 수 / 스테이지 도달한 플레이어 수 그렇기 때문에 클리어를 못한 사람과, 도달한 플레이어를 카운팅 해주어야한다 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호를 출력해야 되기 때문에 스테이지 번호와 해당 스테이지의 실패율을 저장할 클래스를 만든다 더 자세한건 코드 내 주석을 통해 설명 ..