[LeetCode#46] Permutation
·
Algorithm/문제풀이
❒ Description제목Permutation링크https://leetcode.com/problems/permutations/description/자료구조비선형 (그래프)시간복잡도 O(n!)Permutation(순열)이란, 모든 가능한 경우를 그래프 형태로 나열한 결과라고 할 수 있다.이 문제는 BackTraking을 통해서 해결하는 문제인데, 모든 가능한 순열을 생성하기 때문에nums의 크기가 커질수록 시간이 급격히 증가한다. ❒ Solution1. Solution1public class Solution { public List> permute(int[] nums) { List> results = new ArrayList(); List elements = Arrays.s..
HTTP 2.0
·
CS/Network
❒ Description이번에는 HTTP/2.0이 왜 등장했고, 이전 버전과 어떤 차이를 가지는지 공부하자!   ❒ 등장 배경HTTP/1.1의 메시지 포맷은 구현의 단순성과 접근성에 주안점을 두고 최적화되었기 때문에 어느정도 성능은희생시킬 수 밖에 없었다. HTTP/1.1에서 HTTP 트랜잭션은 요청과 응답으로 심플하게 구성되어있는데,응답을 받아야만 다음 요청을 할 수 있기 때문에 회전 지연(RTT: Round Trip Time)을 피할 수 없다는 단점이 있다. 물론 이 문제를 해결하기 위해서 병렬 커넥션, 파이프라인 커넥션 기술이 등장했지만, 각각 제약들도 있었고근본적인 문제가 해결이 되지 못했다. 여기서 근본적인 문제라 함은,  한 번에 하나의 요청만 처리할 수 있다는구조적 한계를 말한다. 이렇게 근..
[프로그래머스#42576] 완주하지 못한 선수
·
Algorithm/문제풀이
❒ Description제목완주하지 못한 선수링크https://school.programmers.co.kr/learn/courses/30/lessons/42576자료구조선형 (해시)시간복잡도O(n + k)이번 문제는 해시맵을 사용하여 간단하게 해결 할 수 있는 문제인데 다른 풀이에서 HashMap을 생성할 때 Stream을 이용한 풀이가 있어서 메모.   ❒ Map 생성Code 1다음과 같은 배열 `"A", "B", "C", "A", "C", "A"`에서 각 요소가 몇 번 나왔는지를 Map 자료구조로 표현할 때나는 주로 아래와 같이 코드를 작성했다.Map counter = new HashMap();for (String name : students) { counter.put(name, counter.get..
HTTP Connection Management
·
CS/Network
❒ DescriptionHTTP가 어떻게 TCP 커넥션을 사용하고, TCP 커넥션의 문제점과 이런 부분을 어떻게 관리하는지이해하고 공부해보자!     ❒ 네트워크 지연의 이유HTTP는 TCP 바로 위에 있는 계층이기 때문에 HTTP 트랜잭션의 성능은 그 아래 계층인 TCP 성능에영향을 받는다. 즉, 대부분의 HTTP 네크워크 지연은 TCP 네크워크의 지연 때문에 발생한다.그럼 정확히 어떤 이유 때문에 지연이 발생하는지 알아보자. 1. Hand shake 지연크기가 작은 HTTP 트랜잭션은 50% 이상의 시간을 TCP를 구성하는데 쓴다.왜냐면 핸드셰이크 과정에서 패킷이 오고 가기 때문이다.  2. 확인 응답(ACK) 지연 확인 응답은 크기가 작아서 같은 방향으로 송출되는 데이터 패킷에 확인 응답을 편승(P..
TCP 제대로 이해하기
·
CS/Network
❒ Description전송계층에서 중요하게 알아야 할 TCP의 연결과정에 대해서 깊이있게 공부해보자.   ❒ TCP란?TCP는 TCP/IP 모델의 전송계층의 프로토콜 중 하나이다. 기본적으로 다음의 특징을 가지고 있다.패킷 사이의 순서 보장한다.연결 지향형 프로토콜을 사용하여 신뢰성을 구축한다.가상회선 패킷 교환 방식을 사용한다.💬 가상회선 패킷 교환 방식이란?각 패킷에는 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고패킷들은 전송된 순서대로 도착하는 방식을 말한다. TCP는 "연결 지향형 프로토콜을 사용하여 신뢰성을 구축한다." 라고 했다.연결 지향형 프로토콜은 송신측 & 수신측 컴퓨터가 데이터를 전송하기 전에 먼저 데이터를송수신할 수 있는 신뢰성 있는 연결 통로를 만들고 데이터..
3xx - Redirection Status Code
·
CS/Network
❒ Description이번 주제는 HTTP 상태코드 중에서 리다이렉션에 관련된 300번대에 대해 자세히 알아볼 것이다.주로 301 ~ 308에 대해서 알아볼 것이면 잘 사용되지 않는 300번은 제외 했다.   ❒ Redirection 상태 코드 3xx리다이렉션 상태코드는 요청을 완료하기 위해 클라이언트가의 추가 조치가 필요할 때 내려준다.웹 브라우저는 리다이렉션 응답의 결과에 상태코드와 리다이렉션할 위치를 알려주는 Location 헤더가 있다.일반적으로 리다이렉션 응답의 결과에 Location 헤더 정보를 포함시키는 것은 좋은 습관이라고 한다.  1. 영구 리다이렉션 (301, 308)상태 코드사유 구절의미301Moved Permanently리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거(불..
[비선형] Hash Table
·
CS/Data Structure
❒ Description비선형 자료 구조 중 하나인 Hash Table의 특징, 충돌 로드 팩터 등등 해시 테이블에 대해서 자세히 알아보자.  ❒ 해시, 해시 함수 그리고 해시 테이블해시 테이블은 키를 값에 매핑할 수 있는 구조인 연관 배열 추상 자료형을 구현한 자료구조이다.가장 큰 특징은 대부분의 연산이 시간 복잡도 O(1)이라는 점이다. 해시는 어떤 길이의 임의 데이터를 고정 길이의 데이터로 매핑하는 것을 말한다.해시 함수는 임의의 크기의 입력 데이터를 고정된 크기의 해시 값으로 변환하는 함수입니다. 해시 테이블을 인덱싱하기 위해 해시 함수를 사용하는 것을 해싱이라고 하며, 해싱은 정보를 가능한 빠르게 저장하고 검색하기 위해 사용하는 중요한 기법 중 하나이다. 해시 함수의 특징은 입력되는 데이터가 뭐..
[LeetCode#973] K Closest Points to Origin
·
Algorithm/문제풀이
❒ Description제목K Closest Points to Origin링크https://leetcode.com/problems/k-closest-points-to-origin/description/자료구조선형 (우선순위 큐)시간복잡도O(nlogn) 이번 문제는 우선순위 큐를 사용하여 해결하는 문제이다. Sort, Heap, Quick Select를 사용하는구현도 있는데 이것에 대해서는 해당 섹션 공부할 때 같이 볼 예정이다. 이 문제는 Comparator와 Comparable 중 하나를 사용해서 우선순위를 결정해줘야 한다.Comparator를 통해서 우선순위를 정해줄 경우 main method에서 `Comparator#compare`메서드를제정의 해줘야해서 DDD에 어긋난다. 반면에 Comparabl..