목록PS (179)
득이공간
2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net #include using namespace std; int Paper[128][128]; int CountWhite; int CountBlue; void DividePaper(int StartRow, int StartCol, int Size) { bool bDivide = false; int ColorCheck = -1; for (int i = StartRow; i < StartRow + Size; ++i) { for (int j =..
1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net #include #include using namespace std; priority_queue MinHeap; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N; cin >> N; for (int i = 0; i > Input; if (Input == 0) { if (MinHeap.empty()) { ..
1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net #include #include #include #include using namespace std; int L, C; vector Alphabets; void DFS(string PW, int CurAlphabetIndex) { if (PW.size() == L) { int Parent = 0; int Child = 0; for (int i = 0; i < L; ++i) { if (PW[i] == 'a' || PW[i] == 'e' || PW[i] == 'i' ||..
해당 게시물은 하루코딩님의 '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);..