
[알고리즘] 그래프와 관련된 개념
2022. 11. 12. 15:51
스스로 공부하기/알고리즘
그래프 (graph) 유향 그래프, 방향 그래프 (directed graph) 루프 (loop) 다중 그래프 (multigraph) 가중 그래프 (weighted graph) 경로 (path) 단순 경로 (simple path) 연결과 강한 연결 (connectivity, strong connectivity) 순환 (cycle) 단순 순환 (simple cycle) 차수 (degree) 연결 그래프 (connected graph) 연결 요소 (connected component) 유향 비순환 그래프 (directly acyclic graph, DAG) 위상 정렬 (topological sort) 완전 그래프 (complete graph) 이분 그래프 (bipartite graph) 인접 행렬과 서로 다른..
[알고리즘] 빠른 거듭제곱 알고리즘 (bit set을 이용한 빠른 거듭제곱)
2022. 11. 1. 16:15
스스로 공부하기/알고리즘
상아탑 6주차 중 거듭제곱을 빠르게 계산하는 알고리즘 (ex. 3^2500000000....) 우선 지수를 이진법으로 표현하고, 이것을 exp로 설정 base = 밑 #include int power(base, exp) { int ret = 1; // 결과값을 1로 우선 설정 while(exp){ //exp가 존재하는 동안 = 자릿수를 모두 이동하는 동안 if(exp & 1 == 1) ret *= base; //1번째 자리가 1일 경우 ret*=base exp >>= 1; //오른쪽 옆으로 한 칸씩 이동 base *= base; //base를 제곱해줌. 이진법에 따라 자릿수 이동할 때마다 실제 숫자는 제곱 } return ret; //ret값을 반환 } 위와 같은 코드를 이용해 bit set을 응용한 빠..
[알고리즘] 백트래킹, 완전 탐색 (1182 부분수열의 합 - C++)
2022. 9. 18. 20:13
스스로 공부하기/알고리즘
백준 1182번 소스코드 #include #include #include #include using namespace std; int result = 0; int S, N; int arr[20]; void backtracking(int idx, int sum){ sum = sum+arr[idx]; if (idx >= N) return; if (sum == S) result++; backtracking(idx+1, sum); backtracking(idx+1, sum-arr[idx]); } int main(void){ cin >> N >> S; for(int i=0; i> arr[i]; } backtracking(0, 0); cout = N) return; //N이 넘을 경우 return하여 함수 종료 i..
[알고리즘] C++ STL vector, iostream
2022. 9. 18. 15:41
스스로 공부하기/알고리즘
vector https://life-with-coding.tistory.com/411 [C++][STL] Vector 기본 사용법 및 예제 활용 인트로 안녕하세요! 오늘은 C++ STL중 하나인 벡터(Vector)의 기본 함수와 예제에 대해서 알아보도록 하겠습니다. 벡터 기본함수는 push_back, pop_back, front, back, clear, begin, end, rbegin, rend, reverse.. life-with-coding.tistory.com iostream https://coding-factory.tistory.com/479 [C++] 입력문 / 출력문 (cin, cout) 사용법 & 예제 C언어에서는 에 있는 scanf, printf를 통해서 입출력문을 사용합니다. 물론 C+..
[알고리즘] 정렬; C++ STL <algorithm>, 내장함수 sort, compare 함수 만들어 넣기 (백준 2751 좌표 정렬하기)
2022. 9. 18. 15:41
스스로 공부하기/알고리즘
STL algorithm이란? c언어를 쉽게 이용할 수 있도록 만든 헤더 파일 중 하나인 algorithm을 이용해 쉽게 정렬을 할 수 있다. 정렬 - 퀵 정렬, 버블 정렬, 병합 정렬, 선택 정렬 버블 정렬의 시간 복잡도는 O(n^2), 병합 정렬의 시간 복잡도는 O(nlogn) 이다. 병합 정렬에 대해서는 앞선 포스팅 https://chocodingdiary.tistory.com/27 에서 알아본 바 있다. (물론 1151번 문제는 당시에 해결하지 못했다) STL 헤더 algorithm을 이용하여 sort함수를 호출시키면 쉽게 오름차순으로 정렬을 할 수 있다. #include int main(){ int arr[10]; //array 값은 알아서 넣어준다. sort(arr, arr+10) // arr..