전체 글 138

[백준], 1647번, 도시 분할 계획 (파이썬, 크루스칼)

문제 동물원에서 막 탈출한 원숭이 한 마리가 세상구경을 하고 있다. 그러다가 평화로운 마을에 가게 되었는데, 그곳에서는 알 수 없는 일이 벌어지고 있었다. 마을은 N개의 집과 그 집들을 연결하는 M개의 길로 이루어져 있다. 길은 어느 방향으로든지 다닐 수 있는 편리한 길이다. 그리고 각 길마다 길을 유지하는데 드는 유지비가 있다. 마을의 이장은 마을을 두 개의 분리된 마을로 분할할 계획을 가지고 있다. 마을이 너무 커서 혼자서는 관리할 수 없기 때문이다. 마을을 분할할 때는 각 분리된 마을 안에 집들이 서로 연결되도록 분할해야 한다. 각 분리된 마을 안에 있는 임의의 두 집 사이에 경로가 항상 존재해야 한다는 뜻이다. 마을에는 집이 하나 이상 있어야 한다. 그렇게 마을의 이장은 계획을 세우다가 마을 안에..

[이코테] 커리큘럼 (파이썬, 위상정렬)

문제 철수는 온라인으로 컴퓨터공학강의를 듣고 있다. 이때 각 온라인강의는 선수강의가 있을 수 있는데, 선수 강의가 있는 강의는 선수 강의를 먼저. 들어야만 해당강의를 들을 수 있다. 예를들어 '알고리즘’ 강의의 선수 강의로 '자료구조'가 존재한다면, ‘자료구조를 들은 이후에 ‘알고리즘' 강의를 들을 수 있다. 철수는 총 N개의 강의를 듣고자 한다. 모든 강의는 1번부터 N번까지의 번호를 가진다. 또한 동시에 여러 개의 강의를 들을 수 있다고 가정한다. 예를 들어 N=3일 때, 3번강의의 선수 강의로 1번과 2번강의가 있고, 1번과 2번강의는 선수강의가 없다고 가정하자. 그리고 각 강의에 대하여 강의 시간이 다음과 같다고 가정하자. 1번 강의: 30시간 2번 강의: 20시간 3번 강의: 40시간 이 경우 ..

위상 정렬 이란? ( + 관련 문제)

위상 정렬이란? 진입차수와 진출차수 위상정렬 알고리즘 동작 흐름 위상정렬 알고리즘 동작 과정 예시 위상정렬 특징 위상정렬 구현 관련 문제 위상 정렬이란? 위상 정렬은 정렬 알고리즘의 일정 사이클이 없는 방향 그래프의 모든 노드의 방향성에 거스르지 않도록 순서대로 나열하는 것 위 세 과목을 모두 듣기 위한 적절한 학습 순서는? 자료구조 → 알고리즘 → 고급 알고리즘 (O) 자료구조 → 고급 알고리즘 → 알고리즘 (X) 진입차수와 진출차수 진입차수(Indegree): 특정한 노드로 들어오는 간선의 개수 진출차수(Outdegree): 특정한 노드에서 나가는 간선의 개수 위상 정렬 알고리즘 동작 흐름 과정 (queue를 사용) A. 진입차수가 0인 모든 노드를 큐에 넣는다. B. 큐가 빌 때까지 다음의 과정을 ..

서로소 집합 자료구조

서로소 집합 이란? 일반적인 서로소 집합 자료구조 경로 압축 사이클 판별 서로소 집합(Disjoint Sets) 이란? 공통 원소가 없는 두 집합 서로소 집합 자료구조란 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조 서로소 집합 자료구조는 합치기 찾기(Union Find) 자료구조라고 불리고 한다. 서로소 집합 자료구조는 두 종류의 연산으로 나누어짐 1. 합집합(Union): 두 개의 원소가 포함된 하나의 집합으로 합치는 연산 2. 찾기(Find): 특정한 원소가 속한 집합이 어떤 집합인지 알려주는 연산 여러 개의 합치기 연산이 주어졌을 때 서로소 집합 자료구조의 동작 흐름은 다음과 같음. 1. 합집합 연산을 확인하여, 서로 연결된 두 노드 A,B를 확인 A와 B의 루트 노드 A..

크루스칼 알고리즘이란? (+ 최소신장트리 란?)

신장트리 란? 크루스칼 알고리즘 이란? 크루스칼 알고리즘 구현 관련 백준 문제 신장 트리(Spanning Tree) 란? 그래프 내에 있는 모든 정점을 연결하고 사이클이 없는 그래프 n 개의 정점이 있다면 신장 트리의 간선 수는 n-1 개 최소 신장 트리(Minimum Spanning Tree)는 각 간선이 가지고 있는 가중치의 합이 최소가 되는 신장 트리 가중치는 거리, 비용, 시간 등 여러가지로 응용 가능 최소 신장 트리의 대표적인 알고리즘은 프림(Prim), 솔린(Sollin), 크루스칼(Kruskal) 알고리즘이 존재 Prim 알고리즘 최초 선택된 정점에 연결된 간선들 중에서 작은 가중치를 가지는 간선을 선택하여 만드는 알고리즘 간선의 개수 N, 노드의 개수가 E 시간복잡도 O(N^2) 또는 힙을..

인프라를 지탱하는 응용 이론 (캐시, 인터럽트, 폴링, I/O 크기, 저널링, 복제, 마스터-워커, 압축, 오류 검출 이란?)

캐시(Cache) 캐시란? 사용 예 캐시 요약 인터럽트(Interrupt) 인터럽트란? 사용 예 인터럽트 요약 폴링(Polling) 폴링이란? 사용 예 폴링 요약 I/O 크기 I/O 크기란? 사용 예 I/O 요약 저널링(Journaling) 저널링이란? 사용 예 저널링 요약 복제 복제란? 사용 예 복제 요약 마스터-워커 마스터-워커란? 사용 예 마스터-워커 요약 압축 압축이란? 사용 예 압축 요약 오류 검출 오류 검출이란? 사용 예 오류 검출 요약 캐시(Cache) 사용 빈도가 높은 데이터를 고속으로 액세스할 수 있는 임시 저장소 캐시는 빠른 성능을 제공하는 대신 비용이 비싸고 비싼만큼 사용할 수 있는 저장 공간이 작다. 캐시를 사용해야 되는 이유 처리 시간에 비해 데이터 접근 시간이 오래 걸릴 때 반복..

[AWS] CI/CD를 위한 Cloud9, CodeCommit, CodeBuild, CodeDeploy, CodePipeline 의 개념

CI/CD 란? CI (지속적인 통합) CD (지속적인 전달, 배포) CI/CD를 위한 도구들 AWS Cloud9 이란? AWS CodeCommit 이란? 소스 관리 시스템이란? CodeCommit 동작 방식 AWS CodeBuild 란? AWS CodeDeploy 란? AWS CodeDeploy의 구성요소 In-Place 배포 방식 Blue/Green 배포 방식 AWS CodeDeployment 의 라이프 사이클 AppSpec.yaml 구성 AWS CodePipeline 이란? CI/CD 란? 애플리케이션 개발에 필요한 여러 단계에 대한 자동화를 통해 애플리케이션을 보다 빠르고 짧은 주기로 고객에게 제공하는 방법론 새로운 코드의 통합, 빌드, 테스트, 릴리스, 배포 등의 애플리케이션 라이프사이클 전체에..

AWS/CICD 2021.08.04

[AWS] OpsWorks 의 개념

AWS OpsWorks 란? Puppet 또는 Chef를 통해 인스턴스나 온프레미스 환경에서 서버가 구성, 배포되는 방법을 자동화하는 구성 관리 서비스 Chef 쿡북 및 솔루션을 사용하여 구성 관리를 수행할 수 있는 AWS OpsWorks Stacks, AWS OpsWorks for Chef Automate Puppet Enterprise 마스터 서버를 구성할 수 있는 OpsWorks for Puppet Enterprise 을 제공함. AWS OpsWorks for Chef Automate 서버와 애플리케이션에 대한 자동화 관리, 규정 준수, 보안 자동화 테스트 등을 지원하는 구성 관리 플랫폼 호스트 기반의 Chef Automate를 완전 관리형 서비스로 제공하는 AWS 기반의 구성 관리 서비스 AWS ..

AWS/CICD 2021.08.02

[AWS] AWS CloudFormation 의 개념

AWS CloudFormation 이란? AWS CloudFormation 구성요소 템플릿(Template) 스택(Stack) CloudFormation AWS CloudFormation 작동 방식 스택 생성 워크플로우 스택 업데이트 워크플로우 템플릿(Template) 구성 사항 포맷 버전 Description Metadata Parameters Rules Mappings Conditions Transform Resources Outputs AWS CloudFormation 이란? AWS의 대표적인 IaC 기반의 구성 조정 도구 스택을 생성할 때 마다 AWS CloudFormation에서 템플릿에 설명된 리소스를 프로비저닝과 구성을 담당 AWS 리소스를 수동으로 생성하거나 구성할 필요가 없고 어떤 것이 ..

AWS/CICD 2021.08.02

[Ansible] vagrant 를 활용하여 ansible 실습 환경 구성

실습 환경 Ubuntu 18.04 VirtualBox latest Vagrant latest vagrant 설치는 이전 포스트 혹은 vagrant 공식 페이지에서 확인하시기 바랍니다. 실습 디렉토리 생성 및 이동 mkdir -p ~/vagrant/ansible && cd ~/vagrant/ansible 플러그인 설치 vagrant plugin install vagrant-hostmanager vagrant plugin install vagrant-disksize vagrant plugin list vagrant box add ubuntu/bionic64 vagrant box list vagrantfile 생성 $ cat Vagrantfile # -*- mode: ruby -*- # vi: set ft=r..