반응형
문제출처
https://www.acmicpc.net/problem/10974
문제풀이
1 2 3 4 5 6 | /** * 재귀적으로 풀이하였음. visit을 이용해서 같은 숫자가 반복출력되지 않도록 해야한다. * printPermutation에서 number는 순열에 추가될 숫자 digit은 순열의 현재 자릿수, n은 입력받은 n을 뜻한다. * 아래 main for문에서는 첫번째 숫자를 선택해주고 printPermutation의 for문을 통해 n자리수 순열을 만들어 * 출력해주면 되는 문제이다. */ | cs |
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <iostream> #include <vector> using namespace std; vector<bool> visit; vector<int> permutation; void printPermutation(int number, int digit, int n) { permutation[digit]=number; if(digit==n) { for(int i=1; i<=n; i++) cout<<permutation[i]<<" "; cout<<"\n"; return; } for(int i=1; i<=n; i++) { if(visit[i]) continue; visit[i]=1; printPermutation(i, digit+1, n); visit[i]=0; } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin>>n; visit.resize(n+1); permutation.resize(n+1); for(int i=1; i<=n; i++) { visit[i]=1; printPermutation(i, 1, n); visit[i]=0; } return 0; } | cs |
반응형
'Algorithm' 카테고리의 다른 글
[BOJ 3908] 서로 다른 소수의 합 (0) | 2019.02.27 |
---|---|
[BOJ 2407] 조합 (0) | 2019.02.26 |
[BOJ 9996] 한국이 그리울 땐 서버에 접속하지 (0) | 2019.02.22 |
[BOJ 9935] 문자열 폭발 (0) | 2019.02.21 |
[BOJ 1764] 듣보잡 (0) | 2019.02.20 |