💻 현생/⛓ 알고리즘
[백준] 15652번 : N과 M (4)
영이오
2021. 3. 21. 14:36
문제
풀이
myunji.tistory.com/198?category=1154147
[백준] 15650번 : N과 M (2)
문제 풀이 myunji.tistory.com/73?category=1154147 [백준] 15649번 : N과 M (1) 문제 풀이 백트래킹의 기본 문제이다. 백트래킹은 해당 value의 방문 여부를 따지며 주로 재귀함수로 구현하는 경우가 많다. 그렇..
myunji.tistory.com
myunji.tistory.com/199?category=1154147
[백준] 15651번 : N과 M (3)
문제 풀이 myunji.tistory.com/198?category=1154147 [백준] 15650번 : N과 M (2) 문제 풀이 myunji.tistory.com/73?category=1154147 [백준] 15649번 : N과 M (1) 문제 풀이 백트래킹의 기본 문제이다. 백트래킹..
myunji.tistory.com
출제자의 의도는 이 두 문제를 합친 응용 문제였을 것 같으나..사실 15650번 문제에서 한문장 아니 2글자만 지우면 된다.
15650번이 중복없는 오름차순이라 flag보다 큰 수를 탐색했는데 flag와 같은 수부터 탐색하면 그게 중복있는 오름차순이다.
소스코드
#include <iostream>
using namespace std;
const int MAX = 8;
int N, M;
int arr[MAX];
void backNM(int cnt, int flag) { //2번 + 3번
if (cnt == M) { //배열 끝까지 완성하면 출력
for (int i = 0; i < M; i++)
cout << arr[i] << ' ';
cout << '\n';
}
else {
for (int i = flag; i < N; i++) {
arr[cnt] = i + 1;
backNM(cnt + 1, i); //가지 아래로 내려감
}
}
}
int main() {
cin >> N >> M;
backNM(0, 0);
}