2024/11 56

힙을 이용한 데이터 리스트 병합

유전자 관련 생명의학 응용 프로그램에서대용량 데이터셋을 처리하는 경우를 가정해보겠다.유사성을 계산하려면 정렬된 DNA 순위가 필요하다. 그러나 데이터셋이 너무 방대하기 때문에 단일 머신에서 처리할 수 없다.그러므로 분산 클러스터에서 데이터를 처리하고 저장하며,각각의 노드는 일련의 정렬된 값이 있다. 주 처리 엔진은 이들 데이터를 모아서 정렬된 단일 스트림으로 변환해야 한다.다수의 정렬된 배열을 합쳐 하나의 정렬된 배열을 만드는 기능을 벡터로 제작해보자. 각각의 리스트는 이미 정렬되어 있기 때문에각 리스트의 최소 원소는 맨 앞에 위치한다.힙에서 최소 원소를 가져온 후 이를 제거하고,최소 원소가 있던 리스트에서 그 다음으로 작은 원소를 선택해 힙에 추가한다. 힙의 노드는 이 원소를 어느 리스트에서 가져왔는지..

LAN을 넘어서는 네트워크 계층의 기능

LAN을 넘어서는 네트워크 계층 여태껏 포스팅한 네트워크의 범위는 일반적으로 LAN에 한정되어 설명하였다. 하지만 LAN을 넘어서 다른 네트워크와 통신하기 위해서는 네트워크 계층의 역할이 필수입니다. 네트워크 계층에서는 IP 주소를 이용해 송수신지 대상을 지정하고, 다른 네트워크에 이르는 경로를 결정하는 라우팅을 통해 다른 네트워크와 통신한다. LAN을 넘어 다른 네트워크와의 통신을 위한 네트워크 계층IP 주소를 통한 송수신지 대상을 지정라우팅을 통한 다른 네트워크와 통신 데이터 링크 계층의 한계물리 계층과 데이터 링크 계층만으로 LAN을 넘어서 통신하기 어려운 두 가지 이유 1. 다른 네트워크까지의 도달 경로를 파악하기 어려움 2. 모든 네트워크에 속한 모든 호스트의 위치를 특정하기 어려움 1. 물리 ..

프로그래머스 LV.2 오픈채팅방 (카카오 코테)

https://school.programmers.co.kr/learn/courses/30/lessons/42888 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 해당 문제는 결국 key값은 변동이 없고 value만 바뀌는 문제이다.따라서 map을 사용하는 것이 적절하다. 1. 해당 key는 유저 아이디이며 value는 유저의 닉네임이 된다. 2. 각 단어의 공백은 stringstream ss 라는 변수를 통해 시프트 연산자를 통해 공백을 기점으로 단어를 끊어 받을 수 있다. 3. Enter, Leave, Change를 기점으로 분기해주면 된다. 3-1. Enter과 Changevalue가 추가되거나 변..

프로그래머스 LV.2 귤 고르기

https://school.programmers.co.kr/learn/courses/30/lessons/138476 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 내가 통과한 코드int solution(int k, vector tangerine) { int answer = 0; vector box(10000001); for (int i : tangerine) { box[i]++; } sort(box.rbegin(), box.rend()); for (int i = 0; i < box.size(); i++) { if (box[i] < k) { answer++; k -= box[i]; } else { ans..

프로그래머스 LV.2 기능개발

https://school.programmers.co.kr/learn/courses/30/lessons/42586 해당 문제는 다시 푸는 문제이다. 이게 내가 짠 코드이다.#include #include #include using namespace std; vector solution(vector progresses, vector speeds) { vector answer; int cnt = 0; deque work; for (int i = 0; i < speeds.size(); i++) { work.push_back({ progresses[i], speeds[i]}); } while (!work.empty()) { cnt = 0; for (auto &i : work) { i.first += i.seco..

스위치와 VLAN

전 포스팅 허브 요약  허브는 주소 개념이 없는 물리 계층 장비이다.전달바은 신호를 다른 모든 포트로 보내기만 할 뿐이다.그리고 반이중 모드로 통신하므로 허브에 연결된 모든 호스트가 충돌이 발생할 범위,즉 콜리전 도메인에 속한다.  CSMA/CD를 통해 충돌 문제를 어느 정도 완화할 수 있지만,사실 이보다 더 근본적인 해결 방법이 있다.전달밥은 신호를 수신지 호스트가 연결된 포트로만 보내고,전이중 모드로 통신하면 된다. 그러면 포트별로 콜리전 도메인이 나누어지기에 충돌 위험이 감소할 것이다.CSMA/CD를 이용할 필요도 없어진다.이러한 기능을 지원하는 네트워크 장비가 바로 데이터 링크 계층의 스위치이다.  스위치란? 즉, 스위치란스위치란 데이터 링크 계층의 네트워크 장비이다.2계층에서 사용한다 하여 L2..

프로그래머스 LV.2 더 맵게

이 문제는 간단한 예외처리 요하므로예외처리를 할 게 딱히 많지 않다.예외 처리의 경우1. scoville의 size()가 2보다 작은 경우에는 비교를 할 수 없다.그 경우에는 K보다 작은지만 체크해 준 뒤 -1을 반환하면 된다.전반적인 로직 간략 설명1. 가장 작은 스코빌 지수 + (두 번째로 작은 스코빌 지수 * 2)는힙을 사용한 우선순위 큐로 관리할 수 있다. 1. 작은 스코빌 지수는 자동으로 정렬이 되므로,top으로 읽어온 뒤 해당 값을 임시로 저장해둔다. 2. pop을 통해 작은 값을 꺼내 준뒤 그 2번째 값을 top으로 읽어온 뒤임시 저장 값에 += 두 번째 * 2 라는 로직을 추가해준다.이후 pop해주기 3. 임시 저장 값을 우선순위 큐에 넣어주면 자동 정렬된다. 위 과정을 조건이 만족할 때 ..

프로그래머스 LV.1 신규 아이디 추천

https://school.programmers.co.kr/learn/courses/30/lessons/72410 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   해당 문제는 결국 규칙에 맞는 아이디를 추천하는 것이다.아이디 규칙은 다음과 같다. 아이디의 제한 사항은 다음과 같다.  string solution(string new_id) { string answer = ""; // 소문자 치환 // 레퍼런스는 포인터를 쓰는 것과 같음. for (char& ch : new_id) { ch = tolower(ch); } // 숫자, 빼기, 밑줄, 마침표 ..

범용 데이터 구조

템플릿으로 범용 데이터 구조와 알고리즘 구현 템플릿을 이용하면 범용 구조체 타입 또는 클래스 형태를 생성할 수 있다. 가능하면 데이터 구조와 알고리즘을 프로그램에 특화된 방식으로 만들지 말고, 최대한 범용적으로 만든다. 템플릿이 아닌 범용 데이터 구조 구현 방법 템플릿 말고 다른 범용 데이터 구조는 얼마든지 만들 수 있다. 좀 구식이긴 하지만 C, C++의 void*가 해당 예시이다. 하지만 이 방법은 타입 세이프(안정적)하지 않다. C++17부터는 void*와 템플릿을 사용하지 않고 std::any 클래스를 사용하는 방법이 있다. 객체 타입이 무엇이든 any클래스에 저장할 수 있다. std::any 내부에서 void*를 사용하지만, 본래 타입(자료형)을 저장해두기 때문에 안정성을 보장한다. 템플릿을 사..