목록알고리즘 (508)
어흥
문제 링크: https://codeforces.com/contest/1323/problem/B Problem - B - Codeforces codeforces.com 1. 구현 - K의 약수를 먼저 구한다 - A와 B의 배열에서 (연속된 1의 개수, 해당 값의 개수)를 Map에 저장한다 - A의 처음부터 끝까지 K의 약수보다 큰수가 존재하면 (A의 수 - K +1)* A의 개수 만큼 더한다 - B의 처음부터 끝까지 K/A의 약수보다 큰 수가 존재하면 (B의 수 -K/A +1) * B의 개수 만큼 더한다 - 위 2개를 곱하고, K의 약수개수만큼 반복한다 #include #include #include #include using namespace std; long long num; vector v; void..
문제 링크: https://codeforces.com/contest/1323/problem/A Problem - A - Codeforces codeforces.com 1. 구현 - 입력받은 배열의 개수가 1개이며 홀수라면 -1 출력 - 입력받은 배열에 짝수 값이 있으면 1과 함께 해당 짝수의 index 출력 - 입력받은 배열에 홀수가 2개 있다면 2와 함께 해당 홀수들의 index 출력 #include #include using namespace std; int arr[100]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int test; cin >> test; for (int t = 0; t < test; ..
문제 링크: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRQm6qfL0DFAUo SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 주의할 점 - 가로의 최대 길이가 12이며, 벽돌은 최대 4개이므로 DFS로 돌릴경우 최대 경우는 12^4로 충분히 가능하다 - 벽돌을 부술 경우, 백트레킹을 사용할 예정이므로 기존의 벽 상태를 저장해야한다. - 필요로 하는 기능들을 정확히 구현만 한다면 어렵지 않다. 2. 구현 - 부수는 경우 Queue를 사용한다. - 부순 후, 내리면 1회가 끝난며, 이 동작을 N번 하면 된다..
문제 링크: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWsBQpPqMNMDFARG#none SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 주의할 점 - N과 M의 최대가 50이여서 BFS를 돌려도 답이 나온다 - 악마가 퍼질 예정의 범위에도 수연이가 이동하지 못하도록 설정한다 2. 구현 - 2번의 주의할 점을 고려하여 "악마를 퍼트린다 -> 수연이가 이동한다"의 순서로 반복한다 import java.io.BufferedReader; import java.io.InputStreamReader; import j..
문제 링크: https://www.acmicpc.net/problem/17073 17073번: 나무 위의 빗물 첫째 줄에 트리의 노드의 수 N과 1번 노드에 고인 물의 양을 의미하는 정수 W가 주어진다. (2 ≤ N ≤ 500,000, 1 ≤ W ≤ 109) 다음 N-1줄에 걸쳐, 트리에 존재하는 간선의 정보가 U V의 형태로 주어진다. (1 ≤ U, V ≤ N, U ≠ V) 이는 양 끝 정점이 각각 U와 V인 간선이 트리에 존재한다는 의미이다. 입력으로 주어지는 트리는 항상 올바른 연결 트리임이 보장되며, 주어지는 트리의 루트는 항상 1번 정점이다. www.acmicpc.net 1. 주의할 점 - 출력값에 소숫점 이하수가 10개 있으므로 cout.precision(11)을 통해 출력 형태를 맞춰..
문제 링크: https://www.acmicpc.net/problem/11437 11437번: LCA 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을 알고싶은 쌍의 개수 M이 주어지고, 다음 M개 줄에는 정점 쌍이 주어진다. www.acmicpc.net 1. 주의할 점 - Tree와 depth를 잘 설정해야한다. - LCA 알고리즘을 정확히 이해해야한다. 2. 구현 - 첫 번째 시도: LCA에 대한 개념을 모르고 Parent,Depth 배열만을 이용해서 구현 -> TLE - 두 번째 시도: LCA에 대한 개념을 익히고 적용 -> lg|Node의 최대갯수|의 올림 만큼만 Tree를 밑으로 판다고 생각한다. Dep..
문제 링크: https://codeforces.com/problemset/problem/1300/B Problem - 1300B - Codeforces codeforces.com 1. 주의할 점 - N의 입력이 주어지면, 총 2*N개의 원소를 입력 받아야한다. 2. 구현 - 입력받은 2*N개의 원소를 Sort하고 N번째와 N-1번째의 차를 출력한다 #include #include using namespace std; long long arr[200000]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int test; cin >> test; for (int t = 0; t < test; t++) { int nu..
문제 링크: https://codeforces.com/contest/1304/problem/B Problem - B - Codeforces codeforces.com 1. 주의할 점 - 현재 입력받은 String이 팰린드롬인지 아닌지 구분한다 -> 팰린드롬이면 결과의 중간에 삽입되도록 ansm에 넣는다. - 현재 입력받은 String이 기존에 입력받은 String과 Reverse가 되는지 확인한다 -> Reverse가 존재한다면 한쪽은 결과의 왼쪽, 다른 한쪽은 결과의 오른쪽에 붙인다 2. 구현 - Reverse 값이 있는지 확인하기 위해 for문을 돌리는 경우 -> 전체 검색할 때 N^2만큼 소요 - Reverse 값이 있는지 확인하기 위해 Map이나 Set을 사용하는 경우 -> 전체 검색할 때 Nlo..