C++

    [C] 문자열(String) - 문자열 저장, 널문자, 문자열 배열, 문자열 크기

    문자열(String) 문자의 집합 문자열이라고 하는 데이터 형식은 따로 존재하지 않는다. 문자열은 한문자(char)가 여러 개 이어져 있는 형태다. 문자열 저장 문자열 저장을 위해서는 문자열 길이에 1을 더한 만큼의 크기가 필요하다 왜냐하면 문자열의 끝을 표시하는 널문자(NULL, \0)가 존재하기 때문이다. 널문자 문자열의 끝을 알려주는 역할 \0, 하나의 문자로 취급, 화면에 출력 되지 않음 문자열 배열 문자열 저장 변수. 문자를 연속적으로 나열한 배열형태가 되어야 한다. 문자열의 크기) 실제 문자열 + 1 (NULL 문자) https://codedragon.tistory.com/5274

    [실4] 10816 - 숫자 카드 2

    #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin >> n; map data; for (int i = 0; i > val; data[val]++; } string s; int m; cin >> m; for (int i = 0; i > val; s += to_string(data[val]); if (i < m - 1) s += ' '; } cout

    [C++] 테스트용 map<int, 포인터배열>

    #include #include using namespace std; class Test { private: Test** arr = new Test * [10]; map m; public: int val = 0; Test() { cout

    C++ 참조자(Reference)의 이해

    참조자(레퍼런스)란 C에서는 없던, C++에서 새로 생긴 개념. 포인터랑 의도하는 바는 같은데 포인터의 단점이 보완되어 출시된 것. C++ 문서에서는 포인터보다 특정 경우가 아니라면 대부분 참조자를 사용하길 권장한다. 값으로 전달하는 방식의 한계 1. 큰 구조체나 클래스를 함수에 전달할 때 인수의 복사본을 매개변수로 만든다. 2. 함수의 호출자에 값을 전달하는 건 반환값을 사용하는 게 유일한 방법이나 함수에서 인수를 수정하는 게 확실하고 효율적이다. → 그래서 참조를 통해 문제를 해결한다. 변수를 참조로 전달하려면 매개변수를 참조로 선언한다. 함수가 호출되면 y는 인수에 대한 참조가 된다. int x=5; addOne(x); //int &y=x; 이런 의미 void addOne(int& y) { y=y+..

    [C++] 싱글톤 패턴, Singleton Pattern

    오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공합니다. (GoF의 디자인 패턴 181쪽) 오직 한 개의 인스턴스만을 갖도록 보장 인스턴스가 여러 개면 제대로 작동하지 않는 상황이 종종 있다. 외부 시스템과 상호작용하면서 전역 상태를 관리하는 클래스 같은 게 그렇다. ex) 파일 시스템 API 파일 시스템 클래스로 들어온 호출이 이전 작업 전체에 대해서 접근할 수 있어야 한다. 아무 데서나 파일 시스템 클래스 인스턴스를 만들 수 있다면 다른 인스턴스에서 어떤 작업을 진행중인지를 알 수 없다. 이를 싱글턴으로 만들면 클래스가 인스턴스를 하나만 가지도록 컴파일 단계에서 강제할 수 있다. 전역적인 접근점을 제공 로깅, 콘텐츠 로딩, 게임 저장 등 여러 내부 시스템에서 파일 ..

    C++ 프림(Prim) 알고리즘으로 MST 찾기

    1. 프림(Prim) 알고리즘이란? 최소신장트리(MST, Minimum Spanning Tree) 를 찾기 위한 대표적인 알고리즘이다. 여기에서 최소신장트리란, 아래와 같이 모든 노드를 연결하는 부분 그래프 중, 가장 비용이 적은 것이다. 하늘색으로 표시한 경로가 최소신장트리이다. 여기에서 최소신장트리의 길이는 (4 + 8 + 16 + 20) = 48다. 최소신장트리를 찾는 알고리즘은 크루스칼(Kruskal) 과 프림(Prim) 이 대표적이다. 2. 동작원리 프림 알고리즘에서는 MST의 후보가 될 간선을 담을 우선순위 큐가 필요하다. 우선순위 큐는 최소의 비용을 가지는 경로가 우선순위를 갖게 한다. (보통 Min Heap을 이용해서 구현한다.) 가장 먼저, 그래프에서 아무 노드나 선택하므로 가장 번호가 ..

    [골4] 1197 - 최소 스패닝 트리

    #include #include #include using namespace std; class Edge { public: int node[2]; int dist; Edge(int a, int b, int dist) { node[0] = a; node[1] = b; this->dist = dist; } bool operator> vertex >> edge; for (int i = 0; i > from >> to >> cost; v.push_back(Edge(from, to, cost)); } sort(v.begin(), v.end..

    [실1] 2468 - 안전 영역

    #include using namespace std; using IntPair = pair; #define MAX 100+1 #define y first #define x second IntPair dir[] { {1, 0}, // 상 {-1, 0}, // 하 {0, -1}, // 좌 {0, 1} // 우 }; int board[MAX][MAX]; bool vis[MAX][MAX]; int n, ans; void Reset() { for (int i = 0; i n) continue; if (!vis[ny][nx] && board[ny][nx] > rain) DFS(ny, nx, rain); } } void Input() { ios_base::sync_with_stdio(false); cin.tie(NU..

    [C++] STL 연관 컨테이너(associative container), set, multiset

    set 세트set 컨테이너는 요소가 그 값에 따라 정렬되는 형태이다 즉, key라 불리는 원소(value)의 집합이다. 또한 이 원소들에 중복을 허용하지 않는다는 것이 특징이다.#include#includeusing namespace std;int main(){ set is; is.insert(55); is.insert(7); is.insert(23); is.insert(61); is.insert(7); is.insert(9); is.insert(58); set::iterator it; for(it = is.begin(); it != is.end(); it++) { cout 그냥 제멋대로 insert를 해도 알아서 정렬이 된다.​실제 트리구조는 항상 균형 이진 트리로 구성된다.이 ..

    [C++] STL 연관 컨테이너(associative container), map, multimap

    map, 맵 맵은 앞서 보았던 set과 거의 동일한 자료 구조다. 다만 차이점이 있다면 set은 key값만 저장하였고, map의 경우 key와 value로 구성되어 저장된다. 한마디로 key와 value 한 쌍을 이루어 자료를 보관할 수 있다. 그림은 추상적으로 map의 자료형태를 나타낸 것이다. 실제로 set과 동일하게 트리구조형태로 정렬되어 저장된다. #include #include using namespace std; int main() { map name; name.insert(pair(4, "kim")); name.insert(pair(1, "kim")); name.insert(pair(3, "lee")); name.insert(pair(5, "park")); name.insert(pair(4,..