전체 글
[C/C++] C++ 배열 초기화 (std::fill_n, std::fill, memset)
C++ 배열 초기화 보통 C++로 코딩을 하거나, C#으로 코딩을 할때 각각 vector와 List를 많이 사용하지만, 자료구조 문제를 풀때는 고정된 크기만큼 할당을 해야하는 조건이 붙는 경우가 많다. ex) 조건 1. 배열의 크기는 1000보다 작아야한다. 위와 같은식으로 조건이 붙는다. 하지만 간단한 배열은 초기화를 해주면 되지만, 배열의 크기가 클 경우에는 일일히 초기화가 아니라 간단히 초기화 해줄 수 있는 방법이 C++에서 제공된다. std:fill 해당 함수의 매개변수는 아래와 같다. void fill(const _FwdIt _First, const _FwdIt _Last, const _Ty& _Val) 첫 인자인 first 부터 last까지 마지막 Type val로 채운다는 뜻이다. 해당 fi..
[Algorithm] C++ Stack (스택) 클래스 구현
스택 (Stack) 자료구조에서 무언가를 쌓는다는 의미로 쓰인다. LIFO(Last In First Out) - 후입선출 이라고 불린다. 삽입연산을 Push라고 하고, 삭제연산을 Pop이라 한다. 보통 DFS (깊이 우선 탐색)에 쓰인다. 예시 웹 브라우저 (뒤로 가기) : 가장 나중에 열린 페이지부터 다시 보여준다. 실행 취소 (undo) : 가장 나중에 실행된 것부터 실행을 취소한다. 수식의 괄호 검사 (연산자 우선순위 표현을 위한 괄호 검사) Code #include using namespace std; class Stack { private: int _count; int _size; short* m_data; public : // 생성자 Stack() { _size = 0; _count = 0; ..
[백준 / BOJ] C++ 11000 강의실 배정
https://www.acmicpc.net/problem/11000 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) www.acmicpc.net 풀이 우선순위 큐와 vector를 이용하였다. vector에 시작시간과 종료시간을 넣은 후 오름차순으로 정렬한다. 이후 우선순위 큐에 오름차순으로 정렬된 종료시간을 저장하고, 이후 종료시간과 두번째 저장된 시작시간을 비교한다. 종료 시간보다 시작시간이 작은 경우는, 다른 강의실을 사용해야하기에 우선순위 큐에 넣어주고, 예외 상황에는 동일 강의실을 쓰기에, pop 이후 다시 push를 해준다. Code #include #include #inclu..
[백준 / BOJ] C++ 2075 N번째 큰 수
https://www.acmicpc.net/problem/2075 2075번: N번째 큰 수 첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다. www.acmicpc.net 풀이 우선순위 큐를 이용한 간단한 문제입니다. 전체 숫자를 전부 큐에 넣으면 아니나 다를까, 시간초과입니다. 정렬된 우선순위 큐에서 주어진 수 N의 크기보다 더 클 경우 해당 숫자를 pop 해주고, N개의 큰 수들만 남겨놓는 식으로 풀 수 있습니다. Code #include #include using namespace std; int main() { ios::sync_with_stdio(false); c..
[백준 / BOJ] C++ 7662 이중 우선순위 큐
https://www.acmicpc.net/problem/7662 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net 풀이 최댓값 우선순위 큐와 최솟값 우선순위 큐를 나누어 해결하는 이중 우선순위 큐 문제이다. 이런 구조는 흔히 레드 블랙트리구조인데 , C++ 에서는 multiset이 있어 이 자체로 이중 우선순위 큐의 역할을 할 수 있다. 또한 중복데이터 삽입이 가능하며, top bottom 원소 모두 삭제가 가능하다. Code #include #include using namespace std; int m..
[Design Pattern] MVVM 패턴
MVVM 패턴 MVVM 패턴은 흔히 알려진 MVC 패턴에서 Controller를 빼고 ViewModel을 추가한 패턴이다. MVVM 패턴의 장점 View와 Model이 서로 전혀 알지 못하기에 독립성을 유지할 수 있다. 독립성을 유지하기에 효율적인 유닛 테스트가 가능하다. View와 ViewModel을 바인딩하기에 코드의 양이 줄어든다. View와 ViewModel의 관계가 N:1이다. MVVM 패턴의 단점 간단한 UI에서 오히려 ViewModel을 설계하는데 어려움이 있을 수 있다. 데이터 바인딩이 필수적으로 요구된다. 복잡해 질수록 Controller처럼 ViewModel이 빠르게 비대해진다. 표준화된 틀이 존재하지 않아 사람마다 이해하는게 다르다. View - 사용자의 눈에 보이는 UI를 담당하는곳..
[C#] 인터페이스 (Interface)
인터페이스란? 구현없이 메서드만 선언된 클래스 문법과 유사하다. 실제로 추상메소드만 0개 이상 담고있는 추상 클래스로 봐도 무방하다. 하지만 인터페이스를 쓰는 이유는 인터페이스는 다중상속이 가능하기때문이다. - 인터페이스는 실무에서 아주 많이 사용되는 기능중 하나입니다. 만약 자동차 주행 S/W를 만드는 프로젝트에서, 여러 모터를 제어하는 기능을 만든다고 가정했을때, 해당 모터의 업체에 따라 제공해주는 라이브러리도 달라지게됩니다. 하지만 인터페이스를 이용하여, 하나의 메소드로 여러 라이브러리를 제어하는 것이 가능합니다. 아래 이미지가 가장 제가 말씀드리는것과 유사하네요. 예시 using System; using System.Collections.Generic; using System.Linq; using..
[백준 / BOJ] C++ 1715 카드 정렬
https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 풀이 우선순위 큐를 사용하는 간단한 문제이다. 우선순위 큐에 입력된 카드 갯수를 하나씩 push 해준 이후, top 의 원소 2개를 먼저 더해주고 해당 큐가 비어있지 않다면 push 해주어 다음 원소와 더한 값들을 결과값에 넣어주면 된다. Code ( C++ ) #include #include using namespace std; int main() { ios::sync_with_s..