728x90
아아 점점 손에 익어가는 듯 싶다.
전 문제는 솔직히 찍어서 맞춘감이 없었지만, 이건 정말 "이렇게 하면 어떨까?" 라는 사고를 꺼냈다.
itlearning.tistory.com/entry/15651-N%EA%B3%BC-M3-C
위의 이전문제와 다른점은, 출력하는 숫자가 늘어가며 출력되는 숫자 또한 바뀐다는 것이다. 하나 늘어날 때마다 그 숫자부터 출력할 수 있게 하는 것이다. 이건 생각보다 간단했다. 그냥 진행되는 for문에 변수를 이중 for문에 변수로 사용하여 초기화 하면 되는 것이기 때문이다.
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
int n,m;
int board[10];
int isused[10];
void func(int k) {
if(k == m) {
for(int i = 0; i < m; i++) {
cout << board[i] << ' ';
}
cout << endl;
return;
}
for(int i = 0; i < n; i++) {
if(!isused[i+1]) {
board[k] = i+1;
//isused[i-1] = 1;
isused[i] = 1;
func(k+1);
for(int j = i ; j < n; j++) {
isused[j+1] = 0;
}
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
func(0);
}
중간에 이중 for문이 보이는가? 어짜피 이 문제는 isused가 얼마나 잘 초기화 되어있는 지를 물어보는 문제다. 그래서 for문을 돌때 나온 i를 이중 for문의 j에 입력하여 그 숫자 이후에 모든 숫자를 false 로 바꾸면 출력이 가능하다.
이게 맞는지는 모르겠다. 그냥 내 머리로 푸는거라.. 일단 풀리면 된거 아니겠는가?
728x90
'Algorithm > 백준' 카테고리의 다른 글
15656 N과M (7) (C++) (0) | 2021.04.26 |
---|---|
15654 N과M (5) (C++) (0) | 2021.04.25 |
15651 N과 M(3) (C++) (0) | 2021.04.25 |
7562 나이트의 이동 (C++) (0) | 2021.04.25 |
2583. 영역 구하기 (C++) (0) | 2021.04.23 |
댓글