TodayILearned
-
[알고리즘] JS 조합, 순열 재귀함수 이해하기TodayILearned/알고리즘 2021. 8. 23. 03:18
순열과 조합, javascript 재귀함수 이해하기 완전탐색 문제풀이를 위해 조합과 순열을 공부했는데, 코드의 흐름이 이해가 잘 가지 않았다. 이전에 재귀함수를 학습할 때도 어렵다고 느꼈는데, forEach문까지 합쳐져서 더 헷갈렸던 것 같다. 재귀함수 + 반복문 어택으로 자꾸 스택의 흐름을 놓치게돼서 헷갈렸는데, 직접 그려보고, 디버거에 쌓이는 호출스택과 비교하면서 보니 코드가 이해되기 시작했다. 우선 조합과 순열에 대해서는 인터넷에 많은 자료가 있기 때문에 이 글에서는 최소한의 설명만 하고, 코드의 진행 방향에 대해서 설명하려고한다. 조합 const getCombinations = function (arr, selectNumber) { const results = []; if (selectNumber..
-
전송계층 -1TodayILearned/네트워크 2021. 8. 16. 20:39
Pipelined protocols Sender가 패킷을 보내고 Receiver가 응답을 하는것을 일일이 기다리면서 작업하면 RTT가 너무 길어진다. 그래서 파이프라이닝 방식, 한번에 많은 패킷을 쏟아 붓는 방식으로 효율성을 높인다. 한 번에 얼만큼의 패킷을 보내는가의 여부는 window size(피드백 없이 한번에 보낼 수 있는 크기) Go-Back-N Receiver는 Sender가 보내는 #Seq 들을 기억해두었다가, 누락된 #Seq가 있을 경우, 다음 #Seq에 대해 ACK를 날리지 않고 계속 누락된 것을 기다린다. Selective Reapeat Receiver는 올바르게 전송된 모든 패킷에 대해 각각 Ack함 Sender는 누락되어 Ack받지 못한 패킷에 대해서만 재전송 아래 그림에서, 패킷2..
-
애플리케이션 계층2TodayILearned/네트워크 2021. 8. 16. 17:39
Reliable 데이터 전송의 원리 패킷 유실, 에러를 처리하여 reliable하게 만듦 완벽한 reliable 채널을 이용했다고 친다면, sender가 보내는 패킷은 모두 receiver에게 도달하게 될 것임. 그러나 channel이 에러가 발생한다면 에러의 발생 유무를 확인한다. 피드백을 보낸다. ACKs(Acknowledgements) NACKs(Negative acknowledgements) 재전송 NAK에 대한 패킷을 재전송한다. Feed back error 만약 feedback 자체에 에러가 있는 경우, 위의 프로세스는 부적절하다. 아래의 프로세스를 따르게된다. Sender는 각각의 패킷에 sequence Number를 붙인다. Sender는 에러가 발생한 ACK/NAK에 대해 재전송한다. R..
-
컴퓨터 네트워크 기본2TodayILearned/네트워크 2021. 8. 16. 16:19
packet : 사용자가 전송한 데이터(bit) 묶음 클라이언트-서버 구조 서버 server는 permenent한 IP를 갖고있음 항상 켜있는 host 웹 서버를 운영하는 서비스들이 80port를 이용하는 이유? 서버는 24시간 켜있어야하고, 주소가 일정해야함. DNS는 주소를 IP주소로 번역해주는 역할을 하는데, 번역 이후 PORT 넘버만은 일치시켜서 보다 찾기 수월하도록 하기 위함 클라이언트 서버와 통신 간헐적인 연결이 됨 유동적 IP를 가짐 클라이언트끼리의 직접적인 통신을 하지 않음 HTTP 애플리케이션 계층의 프로토콜 TCP 서비스를 사용 stateless : 연결이 지속되지않고, 요청/응답 프로세스가 끝나면 연결이 끊어짐 Non-persistent HTTP : 여러가지 객체가 있다면, 객체를 받..
-
컴퓨터네트워크 기본1 - 컴퓨터네트워크 및 인터넷 역사TodayILearned/네트워크 2021. 8. 16. 15:15
KOCW에서 들은 강의내용을 공책에 받아적어놓기는 했지만..(노트필기 애호가임...) 강의 들으면서 적은것이라 따로 머릿속에 정리하는 시간을 갖기위해 정리한다. KOCW의 한양대-컴퓨터네트워크2015(이석복교수님) 강의를 들었다. 찾아보니 더 최신버전이 나오기도했다. (단 2018강의는 피피티 자료 업로드가 안되어있음) 네트워크 구조 network edge와 network core, access networks, physical media로 이루어져있음 network edge : application, host end system(host) : 애플리케이션 프로그램을 의미한다 (ex: 이메일, 웹) client/server model : 클라이언트는 원할 때 네트워크에 연결할 수 있다. 서버는 상시 연결..
-
위장 해쉬로 풀기 자바스크립트TodayILearned/알고리즘 2021. 8. 16. 10:47
바로 전에 올린 '완주하지못한 선수' 2021.08.16 - [TodayILearned/알고리즘] - 완주하지 못한 선수 해쉬로 풀기 자바스크립트 와 비슷한 맥락의 문제이고, 다만 경우의 수가 합쳐져서 점화식 때문에 헷갈리게되는 문제이다. 또 문제가 대놓고 해쉬충돌이 있을테니 처리하라고 예고까지 해준다. (그 전 위장문제도 그랬음) function solution(clothes) { let key; const hashTable = {}; for (let i = 0; i < clothes.length; i++) { key = clothes[i][1]; if (!hashTable[key]) { hashTable[key] = 1; } else { hashTable[key] = hashTable[key] + 1..
-
완주하지 못한 선수 해쉬로 풀기 자바스크립트TodayILearned/알고리즘 2021. 8. 16. 10:41
해쉬문제니까 해쉬로 풀었다. 해당 문제를 이중 for문을 이용해서 푸는 방법도 있지만, 그렇게하면 시간복잡도가 n^2으로 늘어나기도하고 일단 그건 해시 풀이가 아니어서.. 어떤 주제로 문제가 주어지면 최대한 그 주제에 익숙해지기 위해서 해당 주제로 풀려고한다... function solution(participant, completion) { const HashTable = {}; let key; // Add : 해쉬충돌까지 고려했다. for (key of participant) { if (!HashTable[key]) { HashTable[key] = 1; } else { HashTable[key] = HashTable[key] + 1; } } // Search for (key of completion..
-
Intersection of Two Arrays II 자바스크립트TodayILearned/알고리즘 2021. 8. 16. 10:18
이번 알고리즘 스터디 때 이진탐색을 주제로 한 문제로 선정했다. 다만 풀면서 이렇게 푸는것 보다 해시로 푸는게 더 나았을 거라는 생각을 떨칠 수 없었다고... 그래도 이진탐색에 익숙해지려고 이진탐색을 적용해 풀었다. const intersect = function (nums1, nums2) { const answer = []; let sortedArray = nums1; let justArray = nums2; if (nums1.length > nums2.length) { sortedArray; justArray; } else { sortedArray = nums2; justArray = nums1; } sortedArray.sort((a, b) => a - b); for (let i = 0; i < j..