일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 유클리드호제법
- 에라토스테네스의 체
- 깊이우선탐색
- stoi
- int
- 이분탐색
- BFS
- 최소공배수
- 정렬
- 백준
- 프로그래머스
- 배열
- 우선순위큐
- 문자열
- 티스토리챌린지
- 오블완
- 그래프
- Set
- DFS
- C++
- Sort
- 분할정복
- map
- 알고리즘
- 다이나믹프로그래밍
- 백트래킹
- DP
- priority_queue
- vector
- N과M
- Today
- Total
목록c++ 개념 (41)
안녕 세상아,
stable_sort동일한 키 값을 가지는 요소들의 입력 순서 유지ex) [3,1,4,1] 에서 첫번째 1과 두번쨰 1의 순서는 정렬 후에도 바뀌지 않음내부적으로 병합 정렬 기반 알고리즘 사용평균 및 최악 시간 복잡도 : 0(N log^2 N)병합정렬 특성상 비교횟수 많음추가 메모리 많이 사용 sort내부적으로 IntroSort 기반 알고리즘퀵정렬 + 힙정렬 + 삽입정렬 의 조합평균 및 최악 시간 복잡도 : 0(N log N) sort, stable_sort 비교 예제#include #include #include using namespace std;struct Person { int age; string name;};bool cmp(const Person& a, const Person& b)..
참조자란? - 변수의 메모리 주소 직접 참조- 호출한 쪽의 원래 변수에 직접 접근하고 수정 가능- 함수 내부에서 값 바뀌면 원래 변수도 변경사항 반영#include #include #include using namespace std;void change(int answer) { answer+=10; return;}int main() { int answer = 0; change(answer); cout 출력값0참조자를 사용하지 않을 때는 함수에서 값을 아무리 바꿔도 원래 변수의 값으로 출력된다. 하지만,#include #include #include using namespace std;void change(int& answer) { answer+=10; return;..
set_intersection ( 교집합 )- #include - set_intersection (start1, end1, start2, end2, output_it) -> output_it 은 결과 저장할 반복자. 보통 back_inserter 사용 set_union ( 합집합 )- #include - set_union (start1, end1, start2, end2, output_it) -> output_it 은 결과 저장할 반복자. 보통 back_inserter 사용 #include #include #include using namespace std;int main() { vector v1 = { 1, 2, 3, 4 }; vector v2 = { 3, 4, 5, 6 }; ve..
DFS (깊이 우선 탐색)개념:DFS는 시작 노드에서 최대한 멀리 있는 노드까지 먼저 탐색하는 방식입니다.보통 재귀나 스택 (Stack) 자료 구조를 사용해 탐색하며, 모든 경로 탐색이나 연결 요소 찾기에 유용합니다.동작 원리:시작 노드 방문: 시작 노드를 방문하고, 인접한 노드를 재귀적으로 방문합니다.재귀로 탐색 진행: 방문하지 않은 인접 노드를 탐색하고, 각 노드에서 더 이상 방문할 노드가 없을 때까지 재귀 호출을 반복합니다.재귀 호출 종료: 모든 경로를 다 탐색한 후 재귀 호출이 종료되며 상위 노드로 돌아갑니다.DFS 알고리즘의 특징:깊이 우선 탐색을 수행하여 특정 경로가 존재하는지 확인할 수 있습니다.재귀 호출의 특성을 이용해 백트래킹 문제에서 유용하게 쓰입니다.보통 노드의 모든 연결 경로를 탐색..
BFS (너비 우선 탐색)개념:BFS는 시작 노드에서부터 가까운 노드부터 차례대로 탐색하는 방식이다.주로 최단 경로를 찾는 문제나, 레벨 순서 탐색이 필요한 문제에서 유용하게 사용된다.너비 우선 탐색에서는 큐 (Queue) 자료 구조를 사용하여, 먼저 방문한 노드를 기준으로 탐색을 진행한다.동작 원리:초기화: 시작 노드를 큐에 넣고, 방문 표시를 한다.큐에서 노드를 꺼내며 탐색: 큐에서 노드를 하나씩 꺼내며, 해당 노드와 인접한 노드를 모두 확인한다.인접 노드를 큐에 추가: 방문하지 않은 인접 노드를 큐에 추가하고, 방문 표시를 한다.반복: 큐가 빌 때까지 2번과 3번 과정을 반복한다.BFS 알고리즘의 특징:경로 길이 최적화: 가중치가 동일한 그래프에서 최단 거리를 찾을 수 있다.노드의 깊이 별 탐색: ..
c++에는 변수 n의 순열을 구할 수 있는 함수가 있다. 순열이란? 서로 다른 n개의 원소에서 r개를 뽑아 한 줄로 세우는 경우의 수이다. 순열의 갯수는 n!이다. 예를들어, 배열이 {1,2,3} 이라면 순열은 {1,2,3} {1,3,2} {2,3,1} {2,1,3} {3,1,2} {3,2,1} 이다. 기본 문법은 다음과 같다. // defaultbool next_permutation (BidirectionalIterator first, BidirectionalIterator last);// custombool next_permutation (BidirectionalIterator first, BidirectionalIterator last, Compare comp);next_permutation은..
std::transform 함수는 범위에 있는 원소를 변환할 때 사용하는 함수로, algorithm 헤더에 포함되어 있다. 이 함수는 입력 범위의 요소에 대해 지정된 변환 작업(예: 대소문자 변환, 산술 연산)을 수행하고, 결과를 출력 범위에 저장한다. #include // std::transform#include #include #include // for std::tolowerusing namespace std;int main() { string str = "Hello, World!"; // transform을 사용해 모든 문자를 소문자로 변환 transform(str.begin(), str.end(), str.begin(), ::tolower); ..
클래스는 구조체와 함수를 묶은 개념이다. 클래스는 크게 두가지로 구분할 수 있다. 속성은 멤버 변수 또는 필드이고 행위는 멤버 함수 또는 메소드라고 불린다. 멤버 변수는 구조체와 쓰임이 같다. 클래스에서는 접근 지정자를 선택할 수 있다. Private은 내부 전용이고 클래스 외부에서 접근할 수 없다. 보통 멤버 변수와 함께 쓰인다. Protected는 클래스 상속을 위한 접근 지정자이다. 자식 클래스까지 접근 허용하지만 private과 같이 클래스 외부에서 접근할 수 없다. 마지막으로 Public이 있는데 누구나 접근 가능하다. 보통 멤버 함수와 함께 쓰인다.class 클래스 이름 { private : 멤버 변수 1; 멤버 변수 2; ... public : 생성자; 소멸자; 멤..
dp문제를 풀던 중 갑자기 궁금한 점이 생겼다. dp를 풀 때 값이 너무 커지게 되면 문제에서 결과값으로 1234567을 나눈 나머지를 결과로 내놓으라고 한다. 마지막에만 1234567을 나눠서 나머지를 구하면 된다고 생각했는데 dp를 하는 중간에도 1234567을 나누더라구요..? 그럼 값이 달라지는거 아닌가 싶어서 찾아보는데 모듈로 연산의 특성이라는 것이 있었다. for(int i=3;i 모듈로 연산을 간단하게 설명하면, 컴퓨터공학을 조금이라도 공부하면 알 수 있는 % (나머지) --> 이것임. 위의 예처럼 dp[i]가 큰 숫자가 생기는 경우가 있는데 컴퓨터는 너무 큰 숫자를 다루는 데 어려움이 있을 수 있다. 그래서 우리가 모듈로 연산을 통해 적당한 크기 안에서 값을 유지하려고 하는 것이다. 근..
시간복잡도 : O(n)투포인터는 1차원 배열에서 두개의 포인터를 조작하여 원하는 결과를 얻는 알고리즘이다. 두개의 포인터를 사용하여 기존의 방식보다 시간을 개선할 수 있다. 투포인터는 start와 end라는 두개의 포인터를 사용한다.start는 부분배열의 앞 쪽을 가르키는 인덱스이며 end는 부분배열의 뒤 쪽을 가르키는 인덱스이다. 두개의 포인터는 항상 start 매 순간마다 부분합 배열의 합과 구해야하는 값을 비교하여 포인터를 이동하게 된다.부분합 배열의 합 start를 오른쪽으로 한 칸 이동하여 부분합 배열의 크기 증가시킴 부분합 배열의 합 >= 구해야하는 값 end를 왼쪽으로 한 칸 이동하여 부분합 배열 크기 감소시킴while (left x) { right -= 1; ..