분류 전체보기

    [프로그래머스 level 3] 표편집 (C++)

    [프로그래머스 level 3] 표편집 (C++)

    카카오 2021 인턴 삽입, 삭제의 시간이 O(1)이거나 O(logn)이면 풀 수 있을 것 같았다. (알고보니 이동시간이 더 중요했다) log시간을 쓰려면 세그먼트 트리를 써야 할 것 같아서 너무 복잡해질게 예상되어서 그쪽으로는 시도하지 않았다. 예전에 백준에서 풀었던 'AC'문제랑 비슷하다고 생각했다. 그리고 학교 자료구조 시간에 리스트 과제 문제와 비슷했다. 처음에 리스트를 사용해 푸는 거라고 생각해서 List STL을 사용해서 시도해 보았다. STL에 있는 List는 삽입, 삭제는 O(1)이지만, 문제의 'U', 'D', 'Z' 명령어를 처리할 수가 없었다. 키 포인트 Z를 수행하기 위해서는 삭제된 행의 순서를 스택에 입력해 놓아야 한다. C는 리스트에서 값을 지우는 척만 하고 실제로 지워서는 안 ..

    [운영체제] Ch7. 고전적인 동기화 문제들

    [운영체제] Ch7. 고전적인 동기화 문제들

    공룡책(운영체제)을 읽고 정리한 글입니다. 유한 버퍼 문제 소비자와 생산자가 아래 데이터를 공유한다고 가정하자. 길이가 n인 버퍼가 있고, 상호 배제를 제공하는 이진 세마포가 있다. 그리고 현재 버퍼의 빈 공간의 개수와 가득 찬 버퍼의 개수를 기록하는 empty, full 세마포가 있다. 생산자 프로세스의 코드이다. empty 세마포가 0보다 클 때(빈 공간이 있을 때) + mutex가 존재할 때(락을 얻을 수 있을 때) 임계구역에 진입해서 버퍼에 데이터를 입력할 수 있다. 소비자 프로세스의 코드이다. full 세마포가 0보다 클 때(버퍼에 데이터가 있을 때), mutex가 존재할 때(락을 얻을 수 있을 때) 임계구역에 진입해서 버퍼를 소비할 수 있다. Readers - Writers 문제 하나의 DB가..

    [kubernetes] #7 Demo 프로젝트: MongoDB + MongoExpress

    [kubernetes] #7 Demo 프로젝트: MongoDB + MongoExpress

    서론 우선 MongoDB 파드를 생성할 것이다. MongoDB 파드는 외부의 요청을 받지 않도록 Internal Service로 생성할 것이다. 그리고 MongoExpress Deployment를 생성할 것이다. MongoExpress 는 DB url이 필요할 것이고, 생성해 두었던 MongoDB와 연결될 것이다. MongoDB에 접근하기 위해선 인증을 위한 Credentials가 필요하다. DB User와 DB Password가 필요한 것이다. 이 정보들은 MongoExpress의 Deployment.yaml 파일의 environmental 부분에 입력할 것이다. 이는 어떻게 정보를 사용하는지를 나타내기 위함이다. 그리고 DB url을 가지고 있는 ConfigMap을 생성할 것이다. 그리고 Creden..

    [kubernetes] #6 쿠버네티스 YAML 설정 파일

    [kubernetes] #6 쿠버네티스 YAML 설정 파일

    서론 쿠버네티스의 컴포넌트의 설정을 도와주는 yaml 파일에 대해서 알아보자. yaml 파일이 보기에 엄청 길고 복잡해 보여도, 실상은 간단하고 논리적인 구조로 되어있기 때문에 겁먹을 필요 없다. 설정 파일의 세 부분 모든 쿠버네티스 설정파일은 3개의 부분으로 나눌 수 있다. # nginx-deployment.yaml apiVersion: v1 kind: Service metadata: name: nginx-service labels: spec: replicas: 2 selector: ports: templates: 1. metadata 컴포넌트를 서로 구분 지어줄 수 있는 이름과 설명을 입력할 수 있다. 2. specification kind에 적힌 컴포넌트에 대한 구체적인 내용을 정의하는 spec 부..

    [프로그래머스 level 3] 입국심사(C++)

    이분 탐색을 어떻게 사용해야할 지 떠올리기 정말 힘들었던 문제이다. 그리고 오버플로우도 주의해야 한다. n times return 6 [7, 10] 28 입출력 예 설명 가장 첫 두 사람은 바로 심사를 받으러 갑니다. 7분이 되었을 때, 첫 번째 심사대가 비고 3번째 사람이 심사를 받습니다. 10분이 되었을 때, 두 번째 심사대가 비고 4번째 사람이 심사를 받습니다. 14분이 되었을 때, 첫 번째 심사대가 비고 5번째 사람이 심사를 받습니다. 20분이 되었을 때, 두 번째 심사대가 비지만 6번째 사람이 그곳에서 심사를 받지 않고 1분을 더 기다린 후에 첫 번째 심사대에서 심사를 받으면 28분에 모든 사람의 심사가 끝납니다. 이분 탐색을 하려면 특정 값의 low와 high를 정해야 한다. 이 문제에서 특정..

    [kubernetes] #5 핵심 kubectl 명령어

    [kubernetes] #5 핵심 kubectl 명령어

    서론 kubectl 명령어를 통해서 어떻게 파드를 생성하고 디버깅하는지 알아보자. 클러스터 컴포넌트 상태 확인, 생성, 수정 우선 클러스터에 포함된 노드의 상태를 알아보자 kubectl get nodes 클러스터에서 구동중인 파드의 상태를 알아보자 kubectl get pods 클러스터의 서비스들의 상태를 알아보자 kubectl get services get 명령어는 쿠버네티스 클러스터에 존재하는 특정 컴포넌트들의 정보를 리스트 형식으로 가져올 수 있다. create 명령어는 쿠버네티스 클러스터에 특정 컴포넌트를 생성할 수 있다. 여기 나와있는 컴포넌트들을 생성할 수 있다. (kubectl create -h 를 입력하면 볼 수 있다.) 살펴보면 '파드'가 없다는 것을 확인할 수 있다. 파드는 쿠버네티스 ..

    [프로그래머스 level 3] 추석 트래픽 (Python)

    [프로그래머스 level 3] 추석 트래픽 (Python)

    문제에서 주어진 그림 덕분에 해결방법을 바로 떠올릴 수 있었다. 우선 문자열로 주어진 시간을 파싱해서 초단위로 모두 바꾼다. -> 문자열 파싱 때문에 Python 을 사용했다 그리고 위 그림처럼 시작 시간과 종료 시간을 튜플로 묶어서 리스트에 넣는다. (시간 구간을 원소로 하는 리스트 생성) 구간의 시작시간에 대해 오름차순 정렬한다. 구간 리스트를 순회하면서 구간을 우선순위 큐에 삽입한다. 우선순위 큐는 구간의 종료 시점에 대해 오름차순 정렬되어 있다. {구간의 시작 시간 - 1초} 값이 우선순위 큐의 top 원소의 종료 시간보다 같거나 크다면 1초 구간 내에 없다는 뜻이므로 우선순위 큐의 top 원소를 pop 한다. 따라서 우선순위 큐에 원소가 있다면 다들 1초 간격 내에 존재하는 구간인 것이다. 매 ..

    [kubernetes] #4 Minikube와 kubectl - 클러스터 구축

    [kubernetes] #4 Minikube와 kubectl - 클러스터 구축

    서론 minikube가 무엇인지 알아보자 kubectl이 무엇인지 알아보자 Minikube cluster를 설치해보자 Minikube 란? 일반적으로 배포에 사용되는 쿠버네티스 클러스터는 위와 같은 구조를 가진다. 즉, 다수의 마스터 노드와 워커 노드를 가진다. 그리고 마스터 노드와 워커 노드들은 각자의 역할을 부여받는다. 위 그림에서 보다시피 하나의 노드는 하나의 물리 머신 또는 가상 머신이 된다. 만약 로컬 환경에서 이러한 구조를 테스트 해보고 싶다면 어떻게 할까? 작은 기능 하나를 테스트 하기 위해서 위와 같이 많은 노드를 가진 클러스터를 구성해 보는 것은 매우 어렵다. (가상 머신을 많이 만들어서 테스트 한다고 해도, 일반적인 컴퓨터에서는 CPU와 RAM은 충분하지 않을 것이다.) 이같은 걱정을 ..

    [kubernetes] #3 쿠버네티스 아키텍처

    [kubernetes] #3 쿠버네티스 아키텍처

    서론 쿠버네티스 클러스터에는 마스터 노드와 워커 노드가 있다. 이들이 어떻게 다른지 알아보자. 쿠버네티스 클러스터 환경에서 노드들이 어떻게 스스로 복구(self-healing)하고 관리(self-managed)되는지 알아보자. 1. 워커 프로세스(Worker processes) 쿠버네티스 클러스터에는 실질적인 일을 하는 워커 노드가 있다. 워커 노드는 쿠버네티스의 기본 구성요소인 파드 여러 개를 가질 수 있다. 위 그림의 Node1은 컨테이너로 이루어진 2개의 파드를 가지고 있다. 쿠버네티스는 하나의 노드에 3개의 프로세스를 필요로 한다. 프로세스는 모든 노드에 반드시 설치되어야 하며 그들을 스케줄링, 관리 하는데 반드시 필요하다. 첫 번째 프로세스는 노드의 컨테이너 런타임을 위해 수행되는 프로그램이다...

    [Kubernetes] #2 핵심 쿠버네티스 컴포넌트

    [Kubernetes] #2 핵심 쿠버네티스 컴포넌트

    1. Node와 Pod 여기 Worker Node라고 불리는 Node1이 하나 있다. 이 node는 하나의 물리 머신 또는 가상 머신일 수 있다. 그리고 이 노드 안에 'Pod'라고 하는 가장 기본적이고 심플한 쿠버네티스의 구성요소가 있다. 파드는 컨테이너의 추상화를 도와준다. 이를 abstraction over container라고 한다. 우리는 컨테이너라고 하면 기본적으로 Docker를 떠올릴 수 있지만, 노드들은 그렇지 못하다. 실제로 컨테이너 도구는 Docker이외에 다른 다양한 도구들이 있고, 쿠버네티스는 그들 중 어떤 컨테이너 도구를 사용해도 적응할 수가 있다. 적응을 도와주는 것이 바로 컨테이너의 추상화를 도와준다고 하는 파드 덕분이다. 파드에는 일반적으로 하나의 애플리케이션 컨테이너가 들어..