분류 전체보기
-
[1%의 네트워크 원리] 2장 : TCP/IP의 데이터를 전기 신호로 만들어 보낸다책/성공과 실패를 결정하는 1%의 네트워크 원리 2024. 2. 25. 21:37
STORY 1. 소켓을 작성한다 1. 프로토콜 스택의 내부 구성 애플리케이션 네트워크 애플리케이션 (웹 브라우저 등) Socket 라이브러리 (리졸버) OS 프로토콜 스택 (TCP, UDP) 프로토콜 스택 (IP, ICMP, ARP) 드라이버 소프트웨어 LAN 드라이버 (LAN 어댑터 제어) 하드웨어 LAN 어댑터 2. 소켓의 실체는 통신 제어용 제어 정보 소켓 - 제어 정보를 기록한 메모리 영역 통신 상대의 IP 주소, 포트 번호, 통신 동작의 진행 상태 등 프로토콜 스택은 소켓에 기록된 제어 정보를 참조하며 동작 3. Socket을 호출했을 때의 동작 프로토콜 스택은 소켓 한개 분량의 메모리 영역을 확보한다. 그 다음 초기 상태를 나타내는 제어 정보를 소켓에 기록 소켓이 만들어지면 디스크립터를 애플리..
-
[1%의 네트워크 원리] 1장 : 웹 브라우저가 메시지를 만든다책/성공과 실패를 결정하는 1%의 네트워크 원리 2024. 2. 25. 21:34
STORY 1. HTTP 리퀘스트 메시지를 작성한다 1. 탐험 여행은 URL 입력부터 시작한다 URL은 http:// 만 있지 않고, ftp:// 등 다양하게 있다. http://user:password@www.cyber.co.kr:80/dir/file1.htm http: - 프로토콜 명 user - 사용자 명 (생략 가능) password - 패스워드 (생략 가능) www.cyber.co.kr - 웹 서버의 도메인 명 80 - 포트 번호 (생략 가능) /dir/file1.htm - 파일의 경로명 2. 브라우저는 먼저 URL을 해독한다 URL의 요소 http: + // + 웹 서버명 + / + 디렉토리명 + / + 파일명 http: - 프로토콜 // - 나중에 이어지는 문자열이 서버의 이름임을 나타냄 /..
-
프로그래머스 - 순위 검색 [Java]문제 풀이/프로그래머스 2024. 2. 25. 17:05
이 문제는 해시, 이분 탐색을 이용해서 풀었다. 처음에는 입력으로 주어지는 값들을 모은 Node라는 클래스를 만들고 점수로 오름차순 정렬한 뒤 점수로 한번 필터링하고, 조건에 맞는 것들을 순회하여 찾는 방식으로 구현했었다. 그러나 이 방법으로는 효율성을 통과할 수 없다. 이 문제에서 중요한 점은 언어, 직군, 경력, 소울푸드의 모든 경우의 수가 -를 포함해도 4 * 3 * 3 * 3 = 108개밖에 되지 않는 것을 파악하는 것이다. 따라서 그냥 쿼리에서 나올 수 있는 모든 조합에 대한 키에 대해 미리 저장해두고, info를 순회할 때에도 -를 주의하며 키 생성 후 집어넣고 쿼리에서 한번에 찾는 방식으로 구현하면 시간 내에 구현할 수 있다. import java.util.*; import java.io.*..
-
[토비의 스프링] 1장 : 오브젝트와 의존관계책/토비의 스프링 3.1 2024. 2. 24. 23:12
1.1 초난감 DAO 1.1.1 User public class User { String id; String name; String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } 1.1.2 UserDa..
-
프로그래머스 - 혼자서 하는 틱택토 [Java]문제 풀이/프로그래머스 2024. 2. 24. 11:49
이 문제는 완전 탐색을 이용해서 풀었다. 격자가 3 x 3 인 틱택토를 하는 문제로, 격자의 크기가 작아 모든 경우의 수를 구한 뒤 비교하는 방식으로 풀었다. 한 가지 주의할 점은 play를 수행할 때 게임이 끝나는 경우에 왔다고 해서 return을 하면 모든 경우를 볼 수 없다. 따라서 continue로 다음 경우들을 체크해줘야 정답이 나온다. import java.util.*; class Solution { List snapshot = new ArrayList(); char[][] board = new char[3][3]; public int solution(String[] b) { init(); if (isSame(board, b)) { return 1; } play('O'); for (final ..
-
프로그래머스 - 숫자 블록 [Java]문제 풀이/프로그래머스 2024. 2. 22. 17:21
이 문제는 Map을 이용해서 풀었다. 도로의 길이가 10억이므로 배열로 만들면 메모리 초과가 나게 된다. 주목할 점은 end - begin이 5000밖에 안된다는 점이다. 따라서 해당 부분만 저장하면 된다는 생각을 했고, Map을 이용해서 해당 범위 안의 숫자들을 저장했다. 정직하게 반복문을 돌려 1부터 1,000만까지 계산하면 당연히 시간 초과가 난다. 1의 경우 2부터 10억까지를 루프를 돌리기 때문이다. 따라서 num * 2가 begin보다 작을 경우를 두어 이 때는 연산을 통해 한번에 시작 숫자를 찾아내야 한다. 위 부분만 구현해낼 수 있으면 한 번에 문제를 풀 수 있다. import java.util.*; class Solution { Map numbers = new HashMap(); int ..
-
프로그래머스 - 후보키 [Java]문제 풀이/프로그래머스 2024. 2. 19. 18:56
이 문제는 자료구조 및 구현 문제이다. 모든 속성의 길이가 최대 8까지이므로, 완전 탐색으로 시간 안에 구현이 가능하다. 먼저 모든 키의 경우의 수를 구하고, 각 경우에 대해 최소성과 유일성을 검증하는 방식으로 구현했다. 최소성과 유일성을 판단하는 로직이 상당히 까다롭지만, 구현을 해낸다면 문제는 쉽게 풀린다. import java.util.*; import java.io.*; class Solution { Set candidate = new HashSet(); String[][] table; int columnSize; int rowSize; public int solution(String[][] relation) { table = relation; rowSize = relation.length; co..
-
프로그래머스 - 과제 진행하기 [Java]문제 풀이/프로그래머스 2024. 2. 19. 16:56
이 문제는 자료구조를 이용한 문제이다. 처음에는 00:00부터 23:59를 분으로 바꾸어 0 ~ 1339 까지 루프를 돌려 문제를 풀었으나, 계속 오답이 나왔다. 그래서 자료 구조를 사용하여 문제를 풀었고, 정답을 맞출 수 있었다. import java.util.*; import java.io.*; class Solution { static final int MAX = 2000; Stack stopped = new Stack(); Queue tasks = new LinkedList(); public String[] solution(String[][] plans) { List temp = new ArrayList(); for (final String[] plan : plans) { final String ..