전체 글 386

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*를 사용하지만, 본래 타입(자료형)을 저장해두기 때문에 안정성을 보장한다. 템플릿을 사..

벌써 24년 11월 중순이네...내년 목표 세워야지

올해는 기본기 위주로 공부한 감이 있다.기본기가 아직 탄탄한 거 같진 않지만,어쨌든 전반적인 시간은 기본기에 집중됐다.내년부터는 기본기도 기본기지만,실무에 적합하게 쓰일만한 실용적인 결과물 위주의 공부도 집중해보자.내년에는 회사 업무 적응을 위해 실무위주로 공부해보자.개인 프로젝트 착실히 해나가면서배워나간 지식이나 배우게 되는 지식을코드에 녹여내는 경험을 길러보자.이를 토대로 실력을 다듬어서실무에 적용해볼 만한작은 프로젝트를 따로 제작하면서회사에 도움될 만한 실력 위주로 갈고 닦아나가자.그럴려면 일단,지금 진행하던 기본기 공부는 그대로 가져가되조금 더 개인 시간을 빼서 프로젝트에 투자하자.공부는 아는 걸 자주 접하는 것도 좋지만,모르는 걸 해야 실력이 늘어난다.잊지말자.주중엔 회사에서 배우고 익히고주말엔..