목록전체보기 (227)
득이공간
해당 게시물은 하루코딩님의 'Do it! 알고리즘 코딩테스트 with C++' 강의를 수강하며 학습한 내용을 개인적으로 정리한 글입니다. 📌 목차 - 9장. 다이나믹 프로그래밍 9-1. 다이나믹 프로그래밍 📌 9-1. 다이나믹 프로그래밍 * 다이나믹 프로그래밍 - 복잡한 문제를 여러 개의 간단한 문제로 분리하여 부분의 문제들을 해결함으로써 최종적으로 복잡한 문제의 답을 구하는 알고리즘 * 다이나믹 프로그래밍 특징 - 큰 문제를 작은 문제로 나눈다. - 작은 문제들이 반복되어 나타나고 사용되며 작은 문제들의 결과는 항상 같다. - 모든 작은 문제들은 한 번만 계산해 DP 테이블에 저장하고 추후 테이블을 재사용할 수 있다. = 메모이제이션 기법 - 바텀-업(반복문), 탑-다운(재귀함수)로 구현 가능하다. *..
해당 게시물은 하루코딩님의 'Do it! 알고리즘 코딩테스트 with C++' 강의를 수강하며 학습한 내용을 개인적으로 정리한 글입니다. 📌 목차 - 8장. 조합 8-1. 조합 📌 8-1. 조합 * 조합 - nCr: n개의 숫자에서 r개를 뽑는 경우의 수 - nCr = n! / (n-r)! r! * 순열 - nPr: n개의 숫자에서 r개를 뽑아 순서를 고려해 나열할 경우의 수 - nPr = n! / (n-r)! * 조합 동작 원리 1. 특정 문제 가정 2. 모든 부분 문제가 해결된 상황이라고 가정하고 지금 문제 고려 - ex. 5C3 = 4C3 + 4C2, 점화식으로 표현: D[5][3] = D[4][2] + D[4][3] 3. 특정 문제를 해결한 내용을 바탕으로 일반 점화식 도출 - D[i][j] = ..
18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net #include #include using namespace std; int Height[501][501]; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, M, B; cin >> N >> M >> B; for (int i = 0; i > Height[i][j]; } } int MinT..
해당 게시물은 하루코딩님의 'Do it! 알고리즘 코딩테스트 with C++' 강의를 수강하며 학습한 내용을 개인적으로 정리한 글입니다. 📌 목차 - 7장. 트리 7-1. 트리 7-2. 이진 트리 7-3. 세그먼트 트리 7-4. LCA 📌 7-1. 이진 트리 * 트리의 특징 - 순환 구조를 지니고 있지 않고, 1개의 루트 노드가 존재한다. - 루트 노드를 제외한 노드는 단 1개의 부모 노드를 갖는다. - 트리의 부분 트리 역시 트리의 모든 특징을 따른다. - 트리에서 임의의 두 노드를 이어주는 경로는 유일하다. * 트리의 구성 요소 - 노드: 데이터의 index와 value를 표현하는 요소 - 에지: 노드와 노드의 연결 관계를 나타내는 선 - 루트 노드: 트리에서 가장 상위에 존재하는 노드 - index..
해당 게시물은 하루코딩님의 'Do it! 알고리즘 코딩테스트 with C++' 강의를 수강하며 학습한 내용을 개인적으로 정리한 글입니다. 📌 목차 - 6장. 그래프 6-1. 유니온 파인드 6-2. 위상정렬 6-3. 다익스트라 6-4. 벨만-포드 6-5. 플로이드-워셜 6-6. 최소 신장 트리 📌 6-1. 유니온 파인드 * 유니온 파인드 - 그래프 내의 임의 두 노드가 서로 연결되어있는지 판별하기위해 사용되는 부분 알고리즘 * 유니온 파인드 용어 - union 연산: 여러 노드가 있을 때 특정 2개의 노드를 연결해 1개의 집합으로 묶음 - find 연산: 두 노드가 같은 집합에 속해 있는지를 확인, 자신의 대표 노드를 찾아준다. * 유니온 파인드 동작 원리 1. 대표 노드 저장 배열에 각 노드를 초기화 2..
해당 게시물은 하루코딩님의 'Do it! 알고리즘 코딩테스트 with C++' 강의를 수강하며 학습한 내용을 개인적으로 정리한 글입니다. 📌 목차 - 5장. 정수론 5-1. 소수 구하기 5-2. 오일러 피 5-3. 유클리드 호제법 📌 5-1. 소수 구하기 * 소수 - 자신보다 작은 2개의 자연수를 곱해 만들 수 없는 1보다 큰 자연수 - 1과 자기 자신 외에 약수가 존재하지 않는 수 * 에라토스테네스의 체 - 시간 복잡도: O(Nlog(logN)) * 에라토스테네스의 체 동작 원리 1. 구하고자 하는 소수의 범위만큼 1차원 배열 생성 2. 2부터 시작하고 현재 숫자가 지워지지 않을 때는 현재 선택된 숫자의 배수에 해당하는 수를 배열에서 끝까지 탐색하면서 지운다. - 이때 처음으로 선택된 숫자는 지우지 않..
1735번: 분수 합 첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다. www.acmicpc.net #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int A, B; cin >> A >> B; int C, D; cin >> C >> D; int Child, Parent; if (B == D) { Child = A + C; Parent = B; } else { Child = A * D + C * B; Parent = B * D; } int X = max(Child, Parent);..
11689번: GCD(n, k) = 1 자연수 n이 주어졌을 때, GCD(n, k) = 1을 만족하는 자연수 1 ≤ k ≤ n 의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long N; cin >> N; long long P = N; for (int i = 2; i 1) { P = P - P / N; } cout
1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net #include using namespace std; bool PrimeNumber[1000001]; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int M, N; cin >> M >> N; for (int i = 2; i
11438번: LCA 2 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을 알고싶은 쌍의 개수 M이 주어지고, 다음 M개 줄에는 정 www.acmicpc.net #include #include #include #include using namespace std; const int& MaxSize = 100001; const int& MaxK = 20; int K; int MaxDepth; list Neighbors[MaxSize]; int Depth[MaxSize]; int Parent[MaxK][MaxSize]; queue SearchQueue; bool Visited[MaxSize]; void SearchLC..