Group Study (2021-2022)/Algorithm 10

[Algorithm] 10주차 스터디 - 우선순위큐&다익스트라 (백준 1753, 1916, 1504, 2075)

A - 백준 1753번 최단경로 https://www.acmicpc.net/problem/1753 1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 www.acmicpc.net * 문제 방향그래프가 주어지면 주어진 시작점에서 다른 모든 정점으로의 최단 경로를 구하는 프로그램을 작성하시오. 단, 모든 간선의 가중치는 10 이하의 자연수이다. * 코드 #include #include #include #define VEC 300001 #define MAX 100000000 using namespace std..

[Algorithm] 9주차 스터디 - DFS & BFS (백준 1260, 7576, 1012, 10026)

A - 백준 1260번 DFS와 BFS https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 코드 #include #include #include ..

[Algorithm] 8주차 스터디 - Graph & Tree (백준 1991, 11725, 1068, 15681)

A - 백준 1991번 트리 순회 https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net * 문제 이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오. * 코드 #include #include using namespace std; int N; char P, L, R; int parent[26..

[Algorithm] 7주차 스터디 - 분할정복

1. 색종이 - 2 (실버 5) https://www.acmicpc.net/problem/2567 2567번: 색종이 - 2 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 www.acmicpc.net 문제 코드 #include #include #include #include using namespace std; int paper[102][102]; int y_dir[4] = {-1, 0, 1, 0}; int x_dir[4] = {0, -1, 0, 1}; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL)..

[Algorithm] 6주차 스터디 - 이분탐색(백준 18113, 2805, 1920, 2110)

A - 18113 그르다 김가놈 https://www.acmicpc.net/problem/18113 18113번: 그르다 김가놈 첫 번째 줄에 손질해야 하는 김밥의 개수 N, 꼬다리의 길이 K, 김밥조각의 최소 개수 M이 주어진다. (1 ≤ N ≤ 106, 1 ≤ K, M ≤ 109, N, K, M은 정수) 두 번째 줄부터 김밥의 길이 L이 N개 주어진다. www.acmicpc.net 코드 #include #include using namespace std; vector v; int main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(false); int n, k, m, gb; int l = 1, r = 1000000000, mid, count, p = -1..

[Algorithm] 5주차 스터디 - 그리디&구현(백준 11047, 13305, 11000, 21737)

A - 11047 동전 0 https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 코드 #include int main(void) { int coins[10]; int n, k, num, coin, count; count = 0; scanf_s("%d %d", &n, &k); for (int i = 0; i < n; i++) { scanf_s("%d", &num); coins[i] = n..

[Algorithm] 4주차 스터디 - 다이나믹 프로그래밍(백준 9095, 11726, 11048, 11568)

A - 백준 9095 1, 2, 3 더하기 https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net * 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. * 코드 #include using namespace std; int main(int argc, const char** argv) { int t; cin ..

[Algorithm] 3주차 스터디 - 브루트포스&백트래킹(백준 14889, 1182, 14888, 9663)

A - 백준 14889번 스타트와 링크 https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net * 문제 오늘은 스타트링크에 다니는 사람들이 모여서 축구를 해보려고 한다. 축구는 평일 오후에 하고 의무 참석도 아니다. 축구를 하기 위해 모인 사람은 총 N명이고 신기하게도 N은 짝수이다. 이제 N/2명으로 이루어진 스타트 팀과 링크 팀으로 사람들을 나눠야 한다. 축구를 재미있게 하기 위해서 스타트 팀의 능력치와 링크 팀의 능력치의 차이를 최소로 하려고 한다. 위의 예제와 같은..

[Algorithm] 2주차 스터디 - 스택_큐_덱(백준 10828, 10799, 2346, 3078)

A - 10828 스택(S4) https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제 풀이 정수를 저장하는 스택에 대하여 각 기능을 구현한다. 문제에서 요구하는 기능들이 이미 stack 라이브러리에 구현된 기능이므로, 각 입력에 맞게 해당되는 내용을 출력한다. 코드 #include #include #include using namespace std; int main(){ ios_base::sync_with_stdio(false)..

[Algorithm] 1주차 스터디 - 시간복잡도&정렬(백준 11931, 10610, 11399, 11582, 1448)

A - 11931(수 정렬하기 4) https://www.acmicpc.net/problem/11931 11931번: 수 정렬하기 4 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 문제 N개의 수가 주어졌을 때, 이를 내림차순으로 정렬하는 프로그램을 작성하시오. 풀이 #include #include #include #include using namespace std; void init(){ cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false); } int main(){ in..