[C++ / Design Pattern] 팩토리 패턴 #3
1. 팩토리 패턴이란? Pizza라는 클래스가 있다고 가정해봅시다. class Pizza { public: }; 하지만 피자가게에 가서 그냥 “피자 주세요.” 라고 하지는 않습니다. “페퍼로니 피자 주세요.” 또는 “치즈 피자 주세요.” 와 같이 조금더 구체화된 피자를 말하죠. 이와 같이 피자는 “도우 위에 소스와 토핑 등을 올려 구운...
1. 팩토리 패턴이란? Pizza라는 클래스가 있다고 가정해봅시다. class Pizza { public: }; 하지만 피자가게에 가서 그냥 “피자 주세요.” 라고 하지는 않습니다. “페퍼로니 피자 주세요.” 또는 “치즈 피자 주세요.” 와 같이 조금더 구체화된 피자를 말하죠. 이와 같이 피자는 “도우 위에 소스와 토핑 등을 올려 구운...
1. 싱글톤 패턴이란? 싱글톤 패턴은 어떠한 클래스의 인스턴스가 오직 1개만 생성되는 패턴을 의미합니다. 싱글톤 패턴을 다양한 방법으로 구현될 수 있지만, 이번 예시에서는 인스턴스를 얻어올 때 전에 생성된 인스턴스가 있는지 검사하는 방식으로 구현하겠습니다. 2. 싱글톤 구현 #include <stdlib.h> #include <i...
1. 디자인 패턴이란? 디자인 패턴은 소프트웨어 디자인 과정에서 발생하는 문제들을 해결하기 위한 방법들을 모아서 부르는 말입니다. 디자인 패턴을 사용하면 불필요한 코드 또는 복잡한 코드를 없애거나 줄일 수 있습니다. 디자인 패턴을 알고리즘과 자주 혼동하지만 알고리즘은 문제 해결을 위한 순차적 절차라면 디자인 패턴은 코드의 구조와 작성을 더 효율적으로...
1. 선분과 점의 위치 관계 분석 이 문제는 선분 AB와 P의 위치관계를 분석해서 3가지의 예외상황으로 나누어 풀면 쉽습니다. 점 P에서 선분 AB로 수선을 그릴 수 있을 때 점 P에서 선분 AB로 수선을 그릴 수 없으며 점 P가 점 A랑 더 가까울 때 점 P에서 선분 AB로 수선을 그릴 수 없...
1. 트리 1-1. 문제 의찬이는 숫자가 적힌 블록으로 탑 쌓기를 즐긴다. 어느 날 선우는 의찬이가 쌓는 탑에 규칙이 있음을 알게 되었다! 선우가 알아낸 규칙은 다음과 같다. 의찬이가 쌓는 탑은 꼭대기가 1층이고, 1층에는 a개의 블록이 존재한다. 1층의 가장 왼쪽 블록에는 1이 적혀있으며, 블록에 적힌 숫자는 오른쪽으로 갈수록 1씩 증...
1. 트리 1-1. 문제 트리 T는 아래 그림 1과 같은 구조를 가지고 있으며 원은 ‘정점’이라 하고, 정점과 정점을 연결하는 선을 ‘에지’라 한다. 특히 가장 위에 위치한 정점을 ‘루트’라 하는데 오직 하나만 있다. N개의 정점들은 숫자 1부터 N으로 표현하고 루트는 항상 1이다. 두 정점 v와 w를 연결하는 경로는 정점들의 순서리스트 (v0,...
1. 오큰수 1-1. 문제 크기가 N인 수열 A = A1, A2, …, AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다. 예를 들어, A = [3, 5, 2, 7]인 경우 NGE(...
1. 잃어버린 괄호 1-1. 문제 세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다. 그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다. 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오. 1-2. 입력 첫째 줄에 식이 주어진다. 식은 ‘0’~...
1. 브루트포스란? 브루트포스 알고리즘은 brute(무식한)과 force(힘)의 합성어로 뜻 그대로 무식하게 모든 경우의 수를 다 확인하는 알고리즘이다. 브루트포스는 해가 존재할 것으로 예상되는 모든 영역을 전부 탐색하는 방법이므로 시간 복잡도가 높은 편에 속합니다. 2. 약수 구하기 브루트 포스 알고리즘을 이용해서 약수를 구할 수 있습니다. ...
1. 이진 탐색이란? 이진 탐색은 정렬된 데이터들 중 특정한 데이터를 빠르게 찾아낼 수 있는 알고리즘입니다. 이진 탐색을 하기 위해선 무조건 데이터가 정렬되어 있어야 한다는 조건이 있습니다. 2. 이진 탐색의 원리 오름차순으로 정렬된 데이터는 특정 데이터를 기준으로 그 데이터보다 값이 큰 데이터는 오른쪽에 있고, 작은 데이터는 왼쪽에 있을 것...