Programming
-
- [C++] set(집합)set(집합) 특징연관 컨테이너(Associative Container) 중 하나이다.연관 컨테이너에는 set, multiset, map, multimap 이 있다.특정 순서에 따라 고유한 요소를 저장하는 컨테이너이다.기본적으로 요소들은 오름차순(less)으로 정렬되어 삽입된다.중복되는 요소는 없고, 오로지 희소한(Unique) 값만 저장된다.map과 거의 동일하지만, set은 map과 다르게 키(Key)와 값(Value)이 같다고 생각하면 된다.키(Key)라 불리는 요소들의 집합으로 이루어진 컨테이너라고 생각하면 된다.노드 기반 컨테이너이며, 균형 이진 트리로 구현되어 있다.이터레이터(Iterator)는 자동으로 중위 순회(Inordered Traversal)를 통하여 순서대로 키(Key)를 출력한다...
2022.11.08 -
- [C++] multimap(멀티 맵)multimap(멀티 맵) 특징map과 거의 동일하지만, 키(Key) 값이 중복 가능한 컨테이너 키(Key)와 값(Value)이 삽입될 때, 키(Key)가 정렬이 되면서 삽입된다. 헤더 파일멀티 맵을 사용하려면 다음의 헤더 파일을 불러와야 한다.#include 멤버 함수 사용 방법map과 사용 방법이 비슷하다.바로가기 : https://dev-astra.tistory.com/244 [C++] 맵(Map)맵(Map) 특징 연관 컨테이너(Associative Container) 중 하나이다. 연관 컨테이너에는 set, multiset, map, multimap 이 있다. string : int 형태로 값을 할당해야 할 때 맵을 사용한다. 키(Key)와 값(Value) 형태로 이루dev-astra.tisto..
2022.11.08 -
- [C++] unordered_mapunordered_map 특징map보다 더 빠른 탐색을 하기 위한 컨테이너해시 테이블(Hash Table)을 기반으로 구현되었다.삽입, 삭제, 탐색에 대해서 $O(1)$ 정도의 시간 복잡도를 가진다. 가장 최악의 경우 $O(N)$ 정도의 시간 복잡도를 가진다.map의 삽입, 삭제 탐색 시간 복잡도는 $O(\log n)$ 이다.중복된 데이터를 허용하지 않는다.map에 비해 데이터가 많을 경우 월등히 좋은 성능을 보인다.하지만, 키(Key)가 유사한 데이터가 많을 경우, 해시 충돌로 인해 성능이 떨어질 수도 있다. 헤더 파일unordered_map을 사용하려면 다음의 헤더 파일을 불러와야 한다.#include 멤버 함수 사용 방법요소가 삽입될 때 키(Key)가 정렬되지 않는다는 것을 빼고는 map과 사용..
2022.11.08 -
- [C++] map(맵)map(맵) 특징연관 컨테이너(Associative Container) 중 하나이다.연관 컨테이너에는 set, multiset, map, multimap 이 있다.string : int 형태로 값을 할당해야 할 때 맵을 사용한다.키(Key)와 값(Value) 형태로 이루어져 있고, 레드-블랙 트리(Red-Black Tree)라는 구조를 내장하고 있다.노드 기반으로 이루어져 있고, 균형 이진 트리 구조이다.pair 객체 형태로 키(Key)와 값(Value)이 저장된다.Key는 고유한 값이므로 중복이 불가능하다.중복 Key를 사용하려면 multimap을 사용하면 된다.삽입, 삭제, 탐색에 대해서 $O(logN)$ 정도의 시간 복잡도를 가진다.집합(Set)과 마찬가지로 삽입이 되면서 자동으로 정렬이 된다.데이..
2022.11.08 -
- [C++] pair(페어)와 tuple(튜플)pair(페어)와 tuple(튜플) pair(페어)개념사용자가 지정한 2개의 타입의 데이터를 저장하기 위해 사용되는 클래스서로 연관된 2개의 데이터를 한 쌍으로 묶어서 다룰 때 사용하면 편리하다.구조체(struct) 대신 편리하게 2개의 데이터를 관리할 수 있다. 헤더 파일페어(pair)를 사용하려면 다음의 헤더를 불러와야 한다.#include 하지만, , 헤더를 사용할 경우, 헤더가 포함되어 있어 따로 불러와 주지 않아도 된다.#include // 헤더 포함#include // 헤더 포함 형태페어(pair)의 형태는 다음과 같다. template struct pair;T1에 첫 번째 인자를, T2에 두 번째 인자를 넣어주면 된다. 사용 방법초기화다음과 같이 페어(pair)를 초기..
2022.11.03 -
- [C++] lower_bound(), upper_bound() ; 이진 탐색(Binary Search)lower_bound(), upper_bound() ; 이진 탐색(Binary Search) 소개이진 탐색(Binary Search)으로 원소를 탐색하는 함수시간 복잡도가 $O(\log_{2} N)$ 으로, 빠른 속도로 탐색을 수행할 수 있다.탐색을 진행할 컨테이너는 반드시 오름차순으로 정렬되어 있어야 한다. 필요한 헤더#include 형식찾은 값(val)의 주소를 Iterator 형으로 반환한다.lower_bound(ForwardIterator first, ForwardIterator last, const T& val)lower_bound(ForwardIterator first, ForwardIterator last, const T& val) lower_bound()찾으려는 키 값보다 크거나 같은(이..
2022.11.01 -
- [C++] sort 함수를 이용하여 오름차순/내림차순 정렬하는 방법sort 함수를 이용하여 오름차순/내림차순 정렬하는 방법 sort() 함수배열 등 컨테이너들의 요소를 정렬하는 함수보통 array나 vector를 정렬할 때 쓰인다. 필요한 헤더 헤더를 불러와야 사용할 수 있다.#include 기본 포맷default (1)template void sort (RandomAccessIterator first, RandomAccessIterator last);custom (2)template void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);기본적으로 이터레이터 범위와 Compare 파라미터를 통해 콜백 함수(Callback Function)를 선택적으로 처리할 수 있..
2022.10.27 -
- [C/C++] 현재 날짜/시간 원하는 형태로 출력하기현재 날짜/시간 원하는 형태로 출력하기 ① 헤더 불러오기C#include C++#include ② time() 함수를 호출하여 현재의 날짜/시간 얻기time_t timer = time(NULL);time 함수는 time_t 타입을 결과값으로 반환한다.결과값은 유닉스 운영체제가 공식 출시한 1970년 1월 1일 0시 0분 0초를 기점으로 현재까지 흐른 시간을 초 단위로 나타낸다. ③ localtime() 함수를 호출하여 포맷 변환하기struct tm* t = localtime(&timer);time 함수가 리턴해주는 값은 시스템에 따라 32비트나 64비트 정수이기 때문에 그대로 사용하기에는 무리가 있다.따라서 사용하고자 하는 형태에 맞게끔 포맷팅을 해주어야 한다.이 과정을 localtime 함수를 사용..
2022.10.20 -
- [C++] bits/stdc++.hbits/stdc++.h C++의 표준 라이브러리가 모두 포함된 헤더이다.이 헤더를 사용하면 iostream, cstdio 등 여러 라이브러리에 들어있는 함수 등을 하나하나 신경 쓸 필요 없이 코딩에 집중할 수 있다.몇몇 코딩 테스트(삼성 코딩 테스트 등)에서는 이 헤더를 쓸 수 없고 공지에서 주어지는 라이브러리만을 써야 하기 때문에 주의해야 한다. 사용 방법코드 복사하기아래의 링크에 있는 코드들을 모두 복사한다.https://raw.githubusercontent.com/wnghdcjfe/wnghdcjfe.github.io/master/bits/stdc++.h코드를 보면 여러 헤더들이 include 되어있는 것을 확인할 수 있다. 더보기 #ifndef _GLIBCXX_NO_ASSERT #includ..
1 2022.10.18 -
- [C] 일차원 배열의 시프트(Shift)일차원 배열의 시프트(Shift) 배열의 1번 인덱스부터 사용하기개발을 한다거나 또는 과거와 같이 메모리 절약을 위해서는 배열을 0번 인덱스부터 사용하는 것이 일반화되어 있다.하지만, 코딩 테스트를 위해서 수학적인 계산을 한다거나 또는 알고리즘(Algorithm)을 활용하여 문제를 해결하기 위해서는 0번 인덱스를 비워두고 1번 인덱스부터 사용하는 것이 문제를 계산하기에 조금 더 편리할 때가 많이 있다.배열을 1번 인덱스부터 사용하고자 할 때, 배열의 0번 인덱스의 공간을 만들지 않고 바로 1번 인덱스의 공간부터 만들어 사용할 수는 없다.따라서 배열을 선언할 때 입력으로 들어오는 데이터의 최대 개수(N)부터 배열의 길이는 항상 1개가 더 많도록(N+1) 선언되어야 한다. 왼쪽 시프트(Left Shift)일..
2022.09.29 -
- [C] 배열(Array)배열(Array) 배열(Array)많은 양의 데이터를 한꺼번에 일괄적으로 처리하고자 할 때, 유용하게 사용될 수 있는 변수들의 모임배열 선언 방법int a[10]; // 자료형 배열_이름[배열_길이] 배열의 각각의 요소 a[0], a[1], a[2], …, a[9] 를 요소(Element)라고 한다.배열 각각의 값은 대괄호([]) 안의 숫자로 나타내는데, 이를 배열의 인덱스(Index) 또는 첨자라고 한다. 배열의 선언 방법방법 ① int a[5] = { 1, 2, 3, 4, 5 };배열의 길이와 요소를 선언과 동시에 초기화 해주는 방법이다. 방법 ②int b[] = { 1, 2, 3, 4, 5 };배열의 길이는 초기화하지 않고, 배열의 요소를 선언과 동시에 초기화 해주는 방법이다.프로그램은 초기화..
2022.09.28 -
- [C++] 동적 할당(Dynamic Allocation) 방법C++에서의 동적 할당 방법 동적 할당(Dynamic Allocation)실행 시간 동안 사용할 메모리 공간을 할당하는 것동적 메모리 할당을 이용하면 배열의 크기를 가변적으로 생성할 수 있다.메모리 영역 중 힙(Heap) 영역에 저장된다.사용자가 원할 때 메모리에 등록시키고, 원할 때 해제시킬 수 있다.동적 할당한 메모리를 해제하지 않을 경우 메모리 누수가 발생한다.프로그램을 종료해도 메모리에 계속해서 상주한다.동적 할당은 C 방식과 C++ 방식으로 나뉜다. C 기반 동적 할당C 기반 동적 할당 방법으로는 malloc(), calloc() 함수를 이용한 방법이 있다.동적 할당을 해제할 때는 free() 함수를 사용한다. C++ 기반 동적 할당C++ 에서는 new 연산자를 사용하여 동적 할당을 수행할 수 ..
2022.08.24 -
- [C++] cin.ignore()cin.ignore() cin.ignore() 함수는 입력 버퍼를 자동으로 비우도록 설정하기 위해 사용된다.C 언어의 fflush(stdin) 함수와 비슷한 역할을 수행한다. 사용 예#include #include using namespace std;int main() { int val; string str; cin >> val; getline(cin, str); cout 11 위의 예시 코드를 실행해 보면 예상과 달리 입력받은 정수만 출력되고 프로그램이 종료된다. 이런 현상이 발생하는 이유는 표준 입력 버퍼에 개행문자(\n)가 남아 있기 때문이다.getline() 코드 앞에 cin.ignore() 함수로 버퍼를 비워(Clear)주면 이 문제가 해결된다.#incl..
2022.07.09 -
- [SQL] 오라클(Oracle)이 지원하는 파티션 유형
오라클(Oracle)이 지원하는 파티션 유형 ① Range 파티서닝 - 파티션 키 값의 범위(Range)로 분할 - 파티셔닝의 가장 일반적인 형태이며, 주로 날짜 칼럼을 기준으로 함. 예) 판매 데이터를 월별로 분할 ② Hash 파티셔닝 - 파티션 키 값에 해시 함수를 적용하고, 거기서 반환된 값으로 파티션 매밍 - 데이터가 모든 파티션에 고르게 분산되도록 DBMS가 관리 → 각 행(Row)의 저장 위치 예측 불가 - 파티션 키의 데이터 분포가 고른 칼럼이어야 효과적 예)고객번호, 주문일련번호 등 - 병렬처리 시 성능 효과 극대화 - DML 경합 분산에 효과적 ③ List 파티서닝 - 불연속적인 값의 목록을 각 파티션에 지정 - 순서와 상관없이, 사용자가 미리 정한 그룹핑 기준에 따라 데이터를 분할 저장..
2022.07.06 -
- [SQL] 변환되는 데이터의 형태에 따른 서브쿼리의 분류
변환되는 데이터의 형태에 따른 서브쿼리의 분류 서브쿼리 종류 설명 Single Row 서브쿼리 (단일 행 서브쿼리) - 서브쿼리의 실행 결과가 항상 1건 이하인 서브쿼리를 의미한다. - 단일 행 비교 연산자와 함께 사용된다. - 단일 행 비교 연산자에는 =, =, 이 있다. Multi Row 서브쿼리 (다중 행 서브쿼리) - 서브쿼리의 실행 결과가 여러 건인 서브쿼리를 의미한다. - 다중 행 비교 연산자와 함께 사용된다. - 다중 행 비교 연산자에는 IN, ALL, ANY, SOME, EXISTS 가 있다. Multi Column 서브쿼리 (다중 칼럼 서브쿼리) - 서브쿼리의 실행 결과로 여러 칼럼을 반환한다. - 메인쿼리의 조건절에 여러 칼럼을 동시에 비교할 수 있다. - 서브쿼리와 메인쿼리에서 비교 ..
2022.06.28 -
- [SQL] 집합 연산자의 종류
집합 연산자의 종류 SQL의 집합 연산자의 종류에는 UNION, UNION ALL, INTERSECT, EXCEPT 가 있다. 집합 연산자 의미 UNION 여러 개의 SQL문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 만든다. UNION ALL - 여러 개의 SQL문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시된다. - 즉, 단순히 결과만 합치놓은 것이다. - 일반적으로 여러 질의 결과가 상호 배타적(Exclusive)일 때 많이 사용한다. - 개별 SQL문의 결과나 서로 중복되지 않는 경우, UNION과 결과가 동일하다. (결과의 정렬 순서에는 차이가 있을 수 있음.) INTERSECT - 여러 개의 SQL문의 결과에 대한 교집합이다. - 중복된 행은 하나의 행으로 ..
2022.06.26 -
- [SQL] 단일행 문자형 함수의 종류
SQL 단일행 문자열 함수의 종류 문자형 함수 설명 LOWER(문자열) 문자열의 알파뱃 문자를 소문자로 바꾸어 준다. UPPER(문자열) 문자열의 알파벳 문자를 대문자로 바꾸어 준다. ASCII(숫자) 문자나 숫자를 ASCII 코드 번호로 바꾸어 준다. CHR/CHAR(ASCII번호) ASCII 코드 번호를 문자나 숫자로 바꾸어 준다. CONCAT(문자열1, 문자열2) - Oracle, MySQL에서 유효한 함수이며 문자열1과 문자열2블 연결한다. - 합성 연산자 '||'(Oracle)나 '+'(SQL Server)와 동일하다. SUBSTR/SUBSTRING(문자열, m[, n]) - 문자열 중 m 위치에서 n개의 문자 길이에 해당하는 문자를 돌려준다. - n이 생략되면 마지막 문자까지이다. LENGTH..
2022.06.25 -
- [SQL] 연산자의 종류
SQL 연산자의 종류 SQL 연산자에는 비교 연산자, SQL 연산자, 논리 연산자, 부정 비교 연산자, 부정 SQL 연산자가 있다. 구분 연산자 의미 비교 연산자 = 같다. > 보다 크다. >= 보다 크거나 같다.
2022.06.25 -
- [C] 포인터(Pointer) 연산 정리포인터(Pointer) 연산 정리들어가며포인터의 연산을 하나의 코드로 이해해보자. 코드#include void main() { int a[2] = { 4, 9 }; int *p = a; printf("1 : %d \n", *p); printf("2 : %d \n", (*p)++); printf("3 : %d \n", *p++); printf("4 : %d \n", *p--); printf("5 : %d \n", *(p++)); printf("6 : %d \n", *p); printf("7 : %d \n", *--p); printf("8 : %d \n", ++*p); printf("9 : %d \n", *(++p));} 더보기1 : 4 2..
2022.06.24