1. 문제 https://www.acmicpc.net/problem/1389 1389번: 케빈 베이컨의 6단계 법칙 첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻 www.acmicpc.net 2. 문제 접근 문제를 이해하다보니 BFS로 풀면 되겠다고 답이 나왔다. 그래서, BFS 코드를 구현했더니 틀렸다. 문제를 제대로 안봤으니까. 결론적으로 1부터 5까지 각 숫자에 도달할 때까지 거리를 구하면 80%는 해결이다. 예시의 그래프는 아래와 같이 표현할 수 있다. 1부터 예시를 들면, 1은 2까지 [1-3-2]로 2단계, 3까지 ..
분류 전체보기
1. 문제 https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 2. 문제 접근 입력 받은 N 값을 어떻게 하면 최대한 적은 봉지로 나눌 수 있는지 생각해야 한다. 초기에는 N값을 받고 5로 나누고, 5로 나눈 나머지 값을 다시 3으로 나눈 나머지가 0이면, (5로 나눈 몫 + 3으로 나눈 몫) 으로 결과값을 내려고 했다. 그러나, 이런 방식은 오래 걸리고 복잡하다. 그래서 결론적으로 시도했던 방법은, Dynamic Programming을 이용했다. DP[] ..
Network Core 네트워크 엣지에 대해 알아봤으므로 네트워크 코어 영역에 대해 알아볼 것이다. 네트워크 코어 영역에 네트워크를 통해서 어떻게 데이터가 교환되는지에 대한 근본적인 질문을 던질 수 있다. 이를 설명할 수 있는 것이 바로 회선 교환(Circuit Switching)과 패킷 교환(Packet Switching)이다. Packet Switching 종단 시스템들은 서로 메세지를 교환한다. 이때, 패킷 교환은 한 컴퓨터에서 다른 컴퓨터로 데이터를 전송할 때 여러 개의 라우터를 거치고 거쳐 전송되는데, 이 때 데이터를 패킷 단위로 쪼개어 전송하는 방식이다. 이는 한 링크에서 링크로 보낼 때 일단 모든 패킷을 저장하고 버퍼에 저장되어 있는 패킷들을 하나씩 꺼내어 보내는 Store-and-Forwa..
1. 인터넷이란? 인터넷에 대해 구체적으로 정의하기는 어렵지만, 네트워크 관점에서는 네트워크들의 네트워크, 즉 ISP들이 이루고 있는 네트워크들이 더 큰 네트워크를 이루고 있는 것이라 할 수 있다. 주요 구성요소는 4가지가 존재한다. - 호스트(Host) = 종단 시스템(end system), 인터넷의 가장 자리에서 동작하는 네트워크 앱, 우리가 주로 사용하는 앱을 말한다. - 패킷 스위치(Packet Switches) = 호스트와 다른 호스트들과 통신을 가능하게 하는 라우터를 말한다. - 통신 링크(Communication links) = 유선(Fiber, Copper)과 무선(Radio, Satellite)이며 라우터와 라우터를 연결하는 것이다. - 네트워크 = 장치, 라우터, 링크의 모임이다. 2...
주제 세부 내용 Virtualization CPU 가상화 메모리 가상화 Concurrency Thread Lock Condition Variable Semaphore Deadlock Persistence Limited Direct Execution CPU를 가상화해야 하는 이유를 이전 글에서 알 수 있었다. 여러 개의 프로그램을 작동시키기 위해서 CPU 가상화가 필요했는데, 이는 Time Sharing 기법으로 실행할 수 있다. 그러나, 이러한 방법에 문제점이 있다. 첫 번째로 Performance이다. 시스템에서 가상화를 수행할 때 추가적인 오버헤드 없이 가상화를 실행하는 방법을 생각해야 한다. 두 번재는 Control이다. CPU에 대한 제어를 유지하면서 프로세스를 효율적으로 실행시키는 방법을 생각해..
시작하기 전에 앞서, 이 책에서는 3가지를 다루고 있으며 요약하면 아래와 같다. 주제 세부 내용 Virtualization CPU 가상화 메모리 가상화 Concurrency Thread Lock Condition Variable Semaphore Deadlock Persistence 프로세스(Process) 프로세스(process)란 간단하게 말해 현재 실행 중인 프로그램이다. 그렇다면, 프로그램(program)은 디스크에 저장되어 실행가능한 형태로 존재하는 것을 말한다. 컴퓨터는 이러한 프로그램을 메모리에 load하고 CPU에서 처리한다. Multi Processes OS는 여러 개의 프로그램을 동시에 실행할 수 있도록 CPU를 가상화하는 방법을 사용한다. 실제로 물리적인 CPU는 하나지만, 마치 여러..
2중 for문을 사용해서 sum을 점점 늘려가면서 n과 같은지 확인한다. 처음에는 vector에 1~n까지의 번호를 받아서 인덱스 1부터 n까지 검색해서 더하기를 했는데 굳이 vector을 사용하지 않고도 쉽게 낼 수 있는 코드로 수정했다. #include #include using namespace std; int solution(int n) { int answer = 1; for (int i=1;i
이번 문제는 DFS로 쉽게 풀 수 있는 문제이다. visited[][] 배열에 방문 여부를 기록하고, 탐색하면서 방문하지 않은 다른 네트워크를 탐색한다. DFS를 실행한 횟수가 네트워크의 수가 되므로, DFS 실행할 때마다 answer 값을 증가시켜준다. #include #include using namespace std; int visited[201]={0,}; void dfs(int x, int n, vector computers); int solution(int n, vector computers) { int answer = 0; for (int i = 0;i
문제에서 주어진 조건은 다음과 같다. N이 되기 위한 조건 주어지는 진짜 약수들의 배수이다. N은 주어진 진짜 약수들과 같은 수가 아니다. 진짜 약수들은 1과 N을 제외한 수이다. 예를 들어, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24인데, 문제 조건에 따라 1과 24를 제외하면 진짜 약수인 2, 3, 4, 6, 8, 12가 남는다. 문제에서는 진짜 약수를 보고 N을 찾아야 하는데, 진짜 약수의 최솟값과 최댓값을 곱하면 24가 나온다는 것을 알 수 있다. 따라서 주어지는 약수들을 배열로 먼저 받고 이들을 오름차순 정렬한 다음, 최솟값과 최댓값을 곱하면 된다. #include #include #include #include using namespace std; int main() { int..
클라우드 네이티브와 도커까지 알았다면 드디어 쿠버네티스에 대해 알아갈 차례이다. 이번 글에서는 쿠버네티스의 등장 배경과 개념, 구성요소와 각각의 특징을 알아볼 것이다. 쿠버네티스는 왜 등장했는가? 앞선 글에서 도커의 개념에 대해 알아보았다. 도커가 등장하면서 컨테이너 기반의 배포 방식이 보편화되고, 많은 서비스들이 이를 사용하기 시작했다. 점점 Image가 많아지면서 관리해야 할 컨테이너와 서버들이 많아지게 되었다. 즉, 엔지니어가 신경써야 할 것들이 너무 많아져서 힘들었다... 엔지니어는 여기서 가만 있을 수는 없었다. 고민 끝에 떠올린 생각, "반복적인 일들을 자동화하자!" 컨테이너들을 자동으로 관리할 도구(컨테이너 오케스트레이션 툴)를 필요로 하게 되었고, 이때 Kubernetes가 등장하게 되었다..