일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백준 9012번
- 백준 2261번
- 백준 18352번
- 위상 정렬(Topology Sort)
- 그리디 알고리즘(Greedy Algorithm)
- 분할 정복(Divide and Conquer)
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 백준 1948번
- 위상 정렬(Topological Sort)
- 스택(Stack)
- 알고리즘 개념
- DFS & BFS
- 백준 1707번
- DFS
- 백준 17608번
- 동적 프로그래밍(Dynamic Programming)
- 이분 탐색(Binary Search)
- 큐(Queue)
- 백준 2812번
- BFS
- 그래프(Graph)
- 백준 10000번
- 백준 2504번
- 트리(Tree)
- 백준 2493번
- DFS(Depth First Search)
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- BFS(Breadth First Search)
- 이분 그래프(Bipartite Graph)
- 백준 21606번
- Today
- Total
목록기술 관련 정리 (28)
Always Be Wise

Monolithic Architecture 모놀리식 아키텍처(Monolithic Architecture)란, 마이크로 서비스의 각광에 따라 마이크로 서비스가 아닌 전통의 아키텍처를 지칭하는 의미로 생겨난 단어이다. 모든 모듈은 서비스 내부의 Product 형태로 종속되어 있으며, 서비스에만 집중할 수 있는 구조로 되어 있다. 이는 Monolithic 이라는 단어의 뜻 그대로 하나의 Massive 한 Context 형태의 아키텍처를 의미하며 하나의 서비스 또는 어플리케이션이 하나의 거대한 아키텍처를 가질 때, Monolithic 하다고 한다. 모놀리식 아키텍처 Software의 특징은 그 자체로 강건하며 내부 요소간의 Dependency를 크게 가질 수 있다는 점이다. 그리고 이는 필연적으로 구조적인 Co..
명령형 프로그래밍(Imperative Programming) 명령형 프로그래밍은 프로그램이 어떻게 동작해야 하는지 명시적으로 기술하는 패러다임이다. Imperative programming is a paradigm describing HOW the program should do something by explicitly specifying each instruction (or statement) step by step, which mutate the program's state. Example) List collection = new List { 1, 2, 3, 4, 5 }; List results = new List(); foreach(var num in collection) { if (num % 2..
객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것을 의미합니다. 객체 지향 프로그래밍의 중요한 특징은 아래와 같습니다. 캡슐화(Encapsulation) 캡슐화란 데이터와 코드의 형태를 외부로부터 알 수 없게하고, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만드는 방법을 의미합니다. 캡슐화의 중요한 목적은 변수를 Private로 선언하여 데이터를 보호하고, 보호된 변수는 Getter나 Setter 등의 메소드를 통해서만 간접적으로 접근을 허용하는 것입니다. 캡슐화를 하면 불필요한 정보를 감출 수 있어 정보 은닉을 할 수 있습니다. 추상화(Abstraction) 추상화는 객체의 공통적인 속성과 기능을..
트랜잭션은 데이터베이스 관리시스템(DBMS)에서 하나의 작업의 단위를 의미합니다. 트랜잭션의 4가지 특성을 ACID 특성이라고 부릅니다. 원자성 (Atomicity) : 원자성이란 트랜잭션이 수행하는 연산들을 모두 정상적으로 처리하거나 모두 처리하지 않아야 한다는 All-Or-Nothing 방식을 의미합니다. 일관성 (Consistency) : 일관성은 트랜잭션이 성공적으로 수행된 이후에도 데이터베이스의 데이터는 일관된 상태를 유지해야 한다는 의미입니다. 격리성 (Isolation) : 격리성은 하나의 트랜잭션이 완료될 때까지 다른 트랜잭션이 간섭하지 못하도록 하여 각각의 트랜잭션이 독립적으로 수행되어야 한다는 의미입니다. 지속성 (Durability) : 지속성은 트랜잭션이 성공적으로 완료된 이후에 데..
원소들의 순서를 결정하기 위해 원소들이 몇 개씩 있는지 세어서 적절한 위치에 선형 시간에 정렬하는 알고리즘을 의미한다. 비교 기반 정렬 알고리즘과 다르게 직접 데이터의 값을 비교하지 않습니다. 최초 배열 arr에 존재하는 값의 각 원소의 개수를 세어줄 새로운 배열 count를 만들어줍니다. count 배열의 원소를 누적합 값으로 갱신해줍니다. arr의 길이와 같은 result 배열을 만들어줍니다. arr의 각 원소의 값을 count의 인덱스로 사용해 값을 가져온 후, 해당 값을 다시 result의 인덱스로 사용해 arr의 값을 저장합니다. count[arr[i]]의 값을 하나 줄여줍니다. 위 과정을 반복합니다. 시간복잡도는 **O(n + k)**입니다. k가 충분히 작을 경우 시간복잡도가O(n)이 되겠지..
완전 이진 트리를 기본으로 하는 힙(Heap) 자료구조를 기반으로한 정렬 알고리즘입니다. 힙은 큰 키(우선 순위)에 자주 액세스하거나 키(우선 순위) 중심으로 정렬된 시퀀스를 활용해야 할 때 유용한 자료구조입니다. 힙은 한 노드가 최대 두 개의 자식 노드를 가지면서, 마지막 레벨을 제외한 모든 레벨에서 노드들이 꽉 채워진 **완전 이진 트리(complete binary tree)**를 기본으로 합니다. 힙 속성(heap property)은 다음 두 가지입니다. heap order property : 각 노드의 값은 자신의 자식노드가 가진 값보다 크거나 같다(최대 힙, Max heap). 각 노드의 값은 자신의 자식노드가 가진 값보다 작거나 같다(최소 힙, Min heap). heap shape prope..
분할 정복(Devide and Conquer) 기법과 재귀(Recursive) 알고리즘을 이용한 정렬 알고리즘입니다. 배열의 중간을 기준으로 배열을 나눕니다. 나누어진 배열들에 대해서 배열의 크기가 0또는 1이 될 때 까지 위의 과정을 반복합니다. 나누어진 배열들을 정렬하며 병합합니다. 시간복잡도는 언제나 **O(nlogn)**입니다. 전반적인 반복의 수는 점점 절반으로 줄어들기 때문에 O(logn)의 시간이 필요하며, 각 단계에서 병합할 때 모든 값들을 비교해야 하므로 O(n)의 시간이 소모됩니다. 따라서 총 시간복잡도는 O(nlogn)입니다. 두 개의 배열을 병합할 때 병합 결과를 담아 놓을 배열이 추가로 필요합니다. 따라서 공간복잡도는 O(n) 입니다. 장점 안정적인 정렬입니다. 데이터 분포에 따른..
분할 정복(Devide and Conquer) 기법과 재귀(Recursive) 알고리즘을 이용한 정렬 알고리즘입니다. 피봇(pivot)이라고 불리는 임의의 기준값을 정합니다. 피봇 값보다 작은 값들은 모두 왼편으로, 큰 값들은 모두 오른편으로 이동시킵니다(분할). 왼편과 오른편 모두 앞과 동일한 방식으로 피봇을 정하고 값들을 이동시킵니다(재귀). 더 이상 분할이 불가능할 때까지 반복합니다. 시간복잡도는 피봇을 어떻게 선택하느냐에 따라 달라집니다. 피봇을 기준으로 동일한 개수의 작은 값들과 큰 값들이 분할되는 경우 **O(nlogn)**의 시간복잡도를 갖습니다. 하지만 피봇을 기준으로 분할 했을 때, 값들이 한 편으로 몰리는 경우 **O(n^2)**이 걸립니다. 장점 불필요한 데이터의 이동을 줄이고 먼 거..
2번째 원소부터 시작하여 그 앞(왼쪽)의 원소들과 비교하여 삽입할 위치를 지정한 후, 원소를 뒤로 옮기고 지정된 자리에 자료를 삽입하여 정렬하는 알고리즘입니다. 정렬은 2번째 위치(index)의 값을 temp에 저장합니다. temp와 이전에 있는 원소들과 비교하며 삽입해나갑니다. '1'번으로 돌아가 다음 위치(index)의 값을 temp에 저장하고, 반복합니다. 시간복잡도는 최악의 경우(역으로 정렬되어 있을 경우) Selection Sort와 마찬가지로, (n-1) + (n-2) + .... + 2 + 1 => n(n-1)/2 즉, O(n^2) 입니다. 하지만, 모두 정렬이 되어있는 경우(Optimal)한 경우, 한번씩 밖에 비교를 안하므로 **O(n)**의 시간복잡도를 가지게 됩니다. 공간복잡도는 주어..
해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘입니다. 주어진 배열 중에 최소값을 찾습니다. 그 값을 맨 앞에 위치한 값과 교체합니다. 맨 처음 위치를 뺀 나머지 배열을 같은 방법으로 교체합니다. 시간복잡도는 데이터의 개수가 n개라고 했을 때, 비교하는 것이 상수 시간에 이루어진다는 가정 아래, n개의 주어진 배열을 정렬하는데 O(n^2) 만큼의 시간이 걸립니다. 최선, 평균, 최악의 경우 시간복잡도는 O(n^2) 으로 동일합니다. 첫 번째 회전에서의 비교횟수 : 1 ~ (n-1) => n-1 두 번째 회전에서의 비교횟수 : 2 ~ (n-1) => n-2 (n-1) + (n-2) + .... + 2 + 1 => n(n-1)/2 공간복잡도는 주어진 배열 안에서 교환..