본문 바로가기

전체 글

(12)
Docker 시작! (간단한 도커 설명 및 설치) 📚 도커(Docker)란? 도커는 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈 소스 프로젝트이다. Go언어로 작성되어 있으며 기존에 쓰이던 가상화 방법인 가상 머신과는 달리 도커 컨테이너는 성능의 손실이 거의 없어서 차세대 클라우드 인프라 솔루션으로서 많은 개발자들에게 주목받고 있다. 1.1 가상 머신과 도커 컨테이너 기존의 가상화 기술은 여러개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이였다. 생성된 각 게스트 운영체제는 완전히 독립된 공간과 시스템 자원을 할당받아 사용하게된다. 대표적인 툴로는 VirtualBox, VMware ...등이 있다. 하지만 독립된 공간을 생성하는 작업은 반드시 하이퍼바이저를 거쳐야 하기때문에 일반..
📚 재귀함수 📌 재귀함수란? 재귀함수란, 어떤 함수에서 자신을 다시 호출하여 작업을 수행하는 방식의 함수를 의미합니다. 다른 말로는 재귀호출, 되부름이라고 부리기도 하며, 재귀 함수를 작성할 떄는 함수 내에서 다시 자신을 호출한 후 그 함수가 끝날 때까지 함수 호출 이후의 명령문이 수행되지 않는다는 사실과 종료 조건이 꼭 포함되어야 합니다. 📌 예시문제 # data = [3, 5, 8] 성분들의 합으로 표현할 수 있는 숫자의 경우의 수는? # 반복문을 활용한 완전 탐색 data = [3, 5, 8] result = set() for i in range(2): for j in range(2): for k in range(2): result.add(data[0] * i + data[1] * j + data[2] * k)..
📚 해시(Hash) 📌 해쉬란? 해시란 데이터를 다루는 기법 중에 하나며, 검색과 저장이 아주 빠르게 진행된다. 빠르게 진행이 되는 이유는 데이터를 검색할 때 사용할 key와 실제 데이터 값이 한 쌍으로 존재하고, key 값이 배열의 인덱스로 변환되기 때문이다. 📌 해시 함수(Hash Function) & 해싱(Hashing) 해시 함수는 Key값을 고정된 길이의 hash로 변환하는 역할을 한다. 해시 함수에서 Key값을 hash로 변환하는 과정을 해싱(hashing)이라고 한다. 해시 함수에서는 Key값을 해싱 과정을 통해 해시 값(hash value) 또는 해시코드(hash code)으로 변경하며, 이 해시 값이 저장 위치가 된다고 생각하면 된다. 서로 다른 키(key)가 같은 해시(hash)가 되는 경우를 해시 충돌(..
📚 진법변환 & 비트연산 📌 진법변환 진법이란? 수를 셀 때 자리수가 올라가는 단위를 기준으로 하는 셈법의 총칭 사용하는 숫자의 개수가 진법의 숫자를 의미합니다. 진법을 왜 사용할까? CPU는 2진법을 사용하기 때문입니다. bin(10진수) : 10진수를 2진수으로 변환해주는 함수 oct(10진수) : 10진수를 8진수로 변환해주는 함수 hex(10진수) : 10진수를 16진수로 변환해주는 함수(16진수에서는 10은 a, 11은 b, ... , 15는 f로 사용) int(값) : 값을 10진수로 변환해주는 함수 📌 비트연산 비트연산의 종류 & (AND) : 각 자릿수를 비교하여 둘다 1일 경우 1, 아니면 0을 반환 a b return 0 0 0 1 0 0 0 1 0 1 1 1 | (OR) : 각 자릿수를 비교하여 둘 중 하나가..
📚 BFS & DFS 📌 DFS (깊이 우선 탐색, Depth-First Search) 하나의 경우의 수에 대하여 모든 경우의 수를 조사하고 다음 경우의 수를 조사하면서 해를 찾는 과정을 말합니다. 예를 들어, 미로찾기를 할 때 최대한 한 방향으로 갈 수 있을 때까지 쭉 가다가 더 이상 갈 수 없게 되면 다시 가장 가까운 갈림길로 돌아와서 그 갈림길부터 다시 다른 방향으로 탐색을 진행하는 것이 깊이 우선 탐색 방식이라고 할 수 있습니다. 모든 노드를 방문하고자 하는 경우에 이 방법을 선택함 깊이 우선 탐색(DFS)이 너비 우선 탐색(BFS)보다 좀 더 간단함 검색 속도 자체는 너비 우선 탐색(BFS)에 비해서 느림 구현 방법 : 스택 또는 재귀함수로 구현 📌BFS (너비 우선 탐색, Breadth-First Search) 하..
📚 완전탐색 & 이분탐색 탐색 : 많은 데이터 속에서 원하는 데이터를 찾는 것으로 웹에서 특정 문자를 가진 웹 문서를 찾거나 신용카드나 버스카드 역시 검색 알고리즘을 사용한다. 탐색의 종류 : 완전탐색, 이분탐색, 깊이우선탐색(DFS), 너비우선탐색(BFS), 문자열탐색, KMP, BM 📌완전탐색 (Exhaustive Search) 브루트 포스(Brute Force)라고도 하고 가능한 모든 경우의 수를 다 구해서 값을 찾는 것을 완전탐색이라고 합니다. 결과 값이 가장 확실하지만 그만큼 시간이 가장 오래걸리는 탐색방법입니다. 완전탐색 구현방법 : 반복문, 재귀함수(동적 계획법, 백트래킹, 탐욕법) ## 반복문으로 구현 def solution(trump): for i in range(len(trump)): if trump[i] ==..
📚 시간 복잡도 & 공간 복잡도 시간복잡도(Time Complexity) : 알고리즘을 실행하는 데 걸리는 시간을 표현하는 방법 즉, 내가 짠 코드의 실행 시간(Execution Time)을 예측해 얼마나 효율적인 코드인가를 나타내는 개념 실행 시간은 연산(Operation)에 비례함. 표현 방식 : 빅 오 표기법 (Big-O 표기법) 공간복잡도(Space Complexity) : 코드가 얼마나 메모리 공간을 효율적으로 사용하는지에 대한 개념 컴퓨터 성능이 급격히 발달함에따라, 시간복잡도에비해 중요도가 보다 낮아짐. 📌Big-O 표기법😁 점근적 묘사 방법 알고리즘의 "효율성"을 평가하기 위한 분석법 시공간 복잡도를 수학적으로 표시하는 대표적인 방법 기본적으로, 최악의 경우 복잡도를 측정 단, 코드의 실제 러닝 타임을 표시하는 것이 아니..
📚 자료구조 (스택 / 큐) 📌스택(Stack) 스택(stack)이란 쌓아 올린다는 것을 의미합니다. 따라서 스택 자료구조라는 것은 책을 쌓는 것처럼 차곡차곡 쌓아 올린 형태의 자료구조를 말합니다. 대표적인 내장함수 : push, peek, pop 이 있습니다. 📌 스택의 구조 및 특징 push는 새롭게 데이터를 넣는 것을 의미합니다. peek은 가장 마지막에 들어간 데이터를 확인하는 것을 의미합니다. pop은 가장 마지막에 들어간 데이터를 추출하는 것을 의미합니다. 따라서 스택은 시간 순서에 따라 자료가 쌓여서 가장 마지막에 삽입된 자료가 가장 먼저 삭제된다는 구조적 특징을 가지게 됩니다. 이러한 스택의 구조를 후입선출(LIFO, Last-In-First-Out) 구조라고 말합니다. 📌 스택의 장단점 top 을 통해 접근하기 때문..