알고리즘
-
[알고리즘/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
-
[알고리즘] 백준 1261번: 알고스팟 - C++알고리즘/백준 2020. 12. 12. 21:47
www.acmicpc.net/problem/1261 1261번: 알고스팟 첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미 www.acmicpc.net #include #include using namespace std; int a[555][555]; int d[555][555]; int dx[] = {0, 0, -1, 1}; int dy[] = {-1, 1, 0, 0}; int N, M; int main() { scanf("%d", &M); scanf("%d", &N); for (int i = 0; i < N; i++) { for (in..