백준
-
[우선순위큐] 백준 14427번 : 수열과 쿼리 15 - C/C++알고리즘/백준 2021. 3. 14. 14:27
www.acmicpc.net/problem/14427 14427번: 수열과 쿼리 15 길이가 N인 수열 A1, A2, ..., AN이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오. 1 i v : Ai를 v로 바꾼다. (1 ≤ i ≤ N, 1 ≤ v ≤ 109) 2 : 수열에서 크기가 가장 작은 값의 인덱스를 www.acmicpc.net 1. 문제 길이가 N인 수열이 주어진다. 1을 입력받으면, 주어진 수열에서 가장 작은 값의 인덱스를 출력한다. 2를 입력받으면, i번째 수열의 값을 v로 바꾼다. 2. 해결 1) 가장 작은 값만 필요하기 때문에 우선순위 큐를 이용하였다. 2) 수열의 각 정보는 Node 구조체로 구성하였다. - num : 수열의 값 - heapIndex : 2를 입력받으면,..
-
[알고리즘/BFS] 백준 2606번: 바이러스 - C/C++알고리즘/백준 2021. 3. 5. 21:58
https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net - BFS 를 이용하였으며, Queue를 직접 구현하였습니다. #include bool computer[101][101]; int queue[101]; bool visited[101]; int main() { int computerN; scanf("%d", &computerN); int linkN, a, b; scanf("%d", &linkN); for (int i = 0; i < linkN; ++i)..
-
[알고리즘/DP] 백준 1912번: 연속합 - C++알고리즘/백준 2020. 12. 12. 21:59
www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 다이나믹 프로그래밍(DP) 을 이용하였다 #include #include using namespace std; int a[100000], d[100000]; int main() { int n, ans; cin >> n; for (int i = 0; i > a[i]; } d[0] = a[0]; for (int i = 0; i < n; i++) { d[i] = max(a[i], d[i - 1] ..
-
[알고리즘/DP] 백준 11055번: 가장 큰 증가 부분 수열 - C++알고리즘/백준 2020. 12. 12. 21:56
www.acmicpc.net/problem/11055 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수 www.acmicpc.net 다이나믹 프로그래밍(DP)을 이용하였다 #include #include using namespace std; int a[1000], d[1000]; int main() { int n, ans = 0; cin >> n; for (int i = 0; i > a[i]; for (int i = 0; i < n; i++) { d[i] ..
-
[알고리즘/DP] 백준 11052번: 카드 구매하기 - C++알고리즘/백준 2020. 12. 12. 21:55
www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 다이나믹 프로그래밍을 이용하였다. #include #include using namespace std; int p[10001], d[10001]; int main() { int N; cin >> N; for (int i = 1; i > p[i]; } d[0] = 0; for (int i = 1; i
-
[알고리즘/DP] 백준 9095번: 1,2,3 더하기 - C++알고리즘/백준 2020. 12. 12. 21:54
www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 다이나믹 프로그래밍을 이용하였다. #include using namespace std; int d[12]; int main() { int T, n; cin >> T; d[1] = 1; d[2] = 2; d[3] = 4; for (int i = 4; i > n; cout
-
[알고리즘/DP] 백준 11726번: 2xn 타일링 - C++알고리즘/백준 2020. 12. 12. 21:51
www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 다이나믹 프로그래밍을 이용하였다. #include using namespace std; int d[1001]; int main() { int n; cin >> n; d[0] = 1; d[1] = 1; for (int i = 2; i
-
[알고리즘/DP] 백준 1463번: 1로 만들기 - C++알고리즘/백준 2020. 12. 12. 21:49
www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 다이나믹 프로그래밍을 이용하였다. #include using namespace std; int d[1000001]; int main() { int N; cin >> N; d[1] = 0; for (int i = 2; i d[i/2] + 1) { d[i] = d[i / 2] + 1; } if (i % 3 == 0 && d[i] > d[i / 3] + 1) { d[i] = d[i / 3] + 1; } } cout