본문 바로가기

Computer Science6

[Design Pattern] 어댑터 패턴(Adapter Pattern) 어댑터 패턴(Adapter Pattern)이란? 어댑터 패턴(Adapter pattern)은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. 어댑터 패턴 구조 Client는 Target 인터페이스를 구현한 Adaptee가 필요하다. Adaptee는 Target 인터페이스를 구현하지 않고 있다. Adaptee는 이미 개발이 완료되어 사용중이다. Adaptee를 변경하는 것이 적절하지 않은 상황이다. 1. Client는 Target 인터페이스를 통해 Adaptee를 사용하고자 한다. interface Target { Response request(); } 2. Adaptee는 이미 개발이 완.. 2022. 6. 6.
[Data Structure] 큐(Queue) 큐(Queue)란? 큐(queue)는 먼저 집어 넣은 데이터가 먼저 나오는 FIFO(First In First Out)구조의 자료구조이다. 나중에 집어 넣은 데이터가 먼저 나오는 스택과는 반대되는 개념이다. 큐(Queue)의 연산 큐는 아래와 같은 연산들이 필요하다. enqueue(): 큐의 맨 뒤(rear)에 데이터를 삽입한다. dequeue(): 큐의 맨 앞(front)에서 데이터를 삭제한다. peek(): 큐의 맨 앞(front)의 데이터를 제거하지 않고 반환한다. isEmpty(): 큐가 비었다면 1을 반환하고, 그렇지 않다면 0을 반환한다. 여기서 front는 큐의 맨 앞의 위치(인덱스)를 의미하고, rear는 큐의 맨 뒤의 위치(인덱스)를 의미한다. 큐(Queue)의 종류 Linear Queu.. 2022. 5. 23.
[Data Structure] 스택(Stack) 스택(Stack)이란? 스택(stack)은 제한적으로 접근할 수 있는 나열 구조이다. 그 접근 방법은 언제나 목록의 끝에서만 일어난다. 스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)으로 되어 있다. 자료를 넣는 것을 '밀어넣는다' 하여 푸쉬(push)라고 하고 반대로 넣어둔 자료를 꺼내는 것을 팝(pop)이라고 하는데, 이때 꺼내지는 자료는 가장 최근에 푸쉬한 자료부터 나오게 된다. 이를테면, a부터 b와 c를 순서대로 넣은 다음 자료를 하나씩 꺼내면 c부터 b와 a의 순서로 나오게 된다. 스택(Stack)의 연산 S를 스택, x를 데이터 요소(element)라고 하자. 그러면 스택에서는 아래와 같은 중요한 연산이 존재하는 것을 알 수 있다. .. 2022. 5. 23.
[Data Structure] 연결 리스트(Linked List) 연결 리스트(Linked List)란? 연결 리스트(Linked List)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조이다. 데이터를 담고 있는 노드들이 연결되어 있는데, 노드의 포인터가 다음이나 이전의 노드와의 연결을 담당하게 된다. 연결 리스트(Linked List)의 종류 단순 연결 리스트(Singly linked list) 단일 연결 리스트(Singly linked list)는 각 노드에 자료 공간과 한 개의 포인터 공간이 있고, 각 노드의 포인터는 다음 노드를 가리킨다. 이중 연결 리스트(Doubly linked list) 단순 연결 리스트(Singly Linked List)는 next로 현재 노드에서 다음 노드로 갈 수 있지만 이전 노드로는.. 2022. 5. 17.
[Algorithm] 백트래킹(BackTracking) 백트래킹(BackTracking)은 현재 상태에서 가능한 모든 후보군을 따라 들어가며 해결책에 대한 후보를 구축해 나아가다 가능성이 없다고 판단되면 즉시 후보를 포기하면서 정답을 찾아가는 범용적인 알고리즘이다. BackTracking vs Dynamic Programming 백트래킹과 동적 계획법은 재귀를 통해 문제를 해결한다는 공통점이 있지만, 근본적인 차이점을 가지고 있다. 백트래킹(Backtracking) 백트래킹은 현재 상태에서 가능한 모든 후보군(Decision Space)를 하나씩 살펴가면서 해가 될 가능성이 있으면 후보를 구축하고, 해가 될 가능성이 없다면 즉시 후보를 포기하면서 해를 찾아나가는 방식이다. 이때, 해가 될 가능성이 있으면 유망하다(promising)고 하며, 유망하지 않은 노.. 2022. 5. 9.
[Algorithm] 동적 계획법(Dynamic Programming) 동적 계획법(Dynamic Programming)이란 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다. 특정한 알고리즘이 아닌 하나의 문제 해결 패러다임으로 볼 수 있다. Dynamic Programming의 조건 분할 가능 큰 문제를 작은 문제로 나눌 수 있을 때 (Problem → Subproblems) 부분 문제 반복(Overlapping Subproblems) Subproblem들이 겹칠 때 → memoization을 통해 필요한 연산 수를 줄일 수 있음 최적 부분 구조(Optimal Substructure) Subproblems의 Solution으로 더 큰 규모의 Problem의 Solution을 구할 수 있을 때 대표 문제 : 피보나치 수열 Fibonacci 📌 Naive R.. 2022. 5. 6.