반응형
백준 15649번 N과 M (1) 문제이다.
문제는 다음과 같다.
문제만으로 규칙을 모르겠다면 입출력을 봐주자.
문제가 파악되었다면 문제를 풀어보자.
이번 문제는 백트래킹 문제이다.
두번째 입력값인 m이 수열의 길이이기 때문에 이 값을 하나씩 증가시키며 모든 경우를 살펴보고 조건에 맞다면 출력하도록 짜준다.
언어는 C++을 이용하였다.
#include <iostream>
using namespace std;
int n, m;
int arr[8];
int arr2[8];
int check[8] = {0,};
void func(int cnt){
if(cnt == m){
for(int i = 0; i < m; i++){
std::cout << arr[arr2[i]] << ' ';
}
std::cout << '\n';
}
for(int i = 0; i < n; i++){
if(check[i] != 1){
check[i] = 1;
arr2[cnt] = i;
func(cnt+1);
check[i] = 0;
}
}
}
int main(){
std::ios_base::sync_with_stdio(false);
std::cin >> n;
std::cin >> m;
for(int i = 0; i < n; i++){
arr[i] = i + 1;
}
func(0);
}
가장 중요한것은 재귀 방식을 사용한다는 점이다. func내의 for문을 통해 모든 경우를 다 살펴볼 수 있다는 것이 키포인트가 될 것 같다.
성공!
반응형
'Computer Science > 백준' 카테고리의 다른 글
백준 15651번 N과 M (3) (0) | 2020.03.11 |
---|---|
백준 15650번 N과 M (2) (0) | 2020.03.11 |
백준 1436번 영화감독 숌 (0) | 2020.02.06 |
백준 1018번 체스판 다시 칠하기 (0) | 2020.02.06 |
백준 7568번 덩치 (0) | 2020.02.06 |