728x90
반응형

백트래킹 16

[백준/백트래킹/C++] 15650번 N과 M (2) (조합)

https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net #include using namespace std; int n, m; int arr[9]; bool isused[9]; void backtrack(int k){ // 현재 k개 까지 수를 택했음 if(k==m){ for(int i=0; i> n >> m; // m의 개수만큼 0을 넣어줌 for(int i=0; i

알고리즘 2023.01.08

[백준/백트래킹/C++] 1182번 부분수열의 합

https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 문제 해결 방법 k를 차례로 증가시키면서 k번째 원소를 합하거나 합하지 않는 두가지 경우로 백트래킹을 한다 #include using namespace std; int n, s; int arr[21]; int result = 0; void backtrack(int k, int tot){ if(k == n){ if(tot == s) result++; return;..

알고리즘 2023.01.07

[백준/백트래킹/C++] 9663번 N-Queen

https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 해결 방법 백트래킹을 사용하여 풀수있다 퀸은 상, 하, 좌, 우, 대각선으로 움질일 수 있고 시간을 줄이기 위해 세가지 조건을 검사할 수 있다 우선 퀸이 좌우로 움질일 수 있기 때문에 한 행에는 하나의 퀸 만 놓을 수 있다는 것을 전제로 두고 시작한다 1번 조건 (상하로 움직일 수 있기 때문에 같은 열에 있는지 확인하는 조건) : i의 값이 같으면 continue 해준다 2번 조건 ( / 모양 대각선 위에 ..

알고리즘 2023.01.07

[백준/백트래킹/C++] 10819번 차이를 최대로

https://www.acmicpc.net/problem/10819 10819번: 차이를 최대로 첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다. www.acmicpc.net 문제 해결 방법 백트래킹을 사용하여 가능한 수열을 모두 만들고 각각 주어진 식의 최대값을 구해 제일 큰 값을 찾는다 #include using namespace std; int n; int arr[10]; // 만든 수열을 담을 배열 int num[10]; // 입력받을 배열 bool isused[10]; // 사용했는지 체크 int result = 0; void solve(){ // 주어진 식을 이용하여 최대..

알고리즘 2023.01.07

[백준/백트래킹/C++] 15649번 N과 M(1)

https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 백트래킹 알고리즘을 사용하는 문제이다 #include using namespace std; int n, m; int arr[10]; bool isused[10]; void backtrack(int k){ if(k==m){ for(int i=0; i

알고리즘 2023.01.07
728x90
반응형