알고리즘

[java] 순열

벨포트조던 2016. 10. 21.
반응형

C++ 같은 경우에는 표준 라이브러리인 STL에 포함된 next_permutation()함수에서 모든 순열을 생성해준다.

가능한 순열의 수는 N!인데, N이 10을 넘어간다면 시간 안에 모든 순열을 생성하기 어려우므로 전체를 생성하는

방법 외에 다른 방법을 찾아본다.



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
// n : 전체 원소의 개수
// picked : 지금까지 고른 원소의 개수
// isPick : 이전에 선택된 원소인지 저장하고있는 변수
// n개의 원소의 모든 순열을 구하는 방법
int n;
void permutation( ArrayList<Integer> picked, boolean isPick[] ){
    // 기저사례 : 모든 개수를 뽑아냈다.
    if( picked.size() == n ){
        System.out.println(picked);
        return ;
    }
     
    for(int next = 0; next < n; next++){
        if( isPick[next] )
            continue;
         
        picked.add(next);
        isPick[next] = true;
         
        permutation( new ArrayList<Integer>(picked), isPick );
         
        picked.remove(picked.size()-1);
        isPick[next] = false;
    }
}

출처 :프로그래밍 대회에서 배우는 알고리즘 문제해결 전략 / 구종만 지음






다른 참고자료 


http://gorakgarak.tistory.com/523


반응형

댓글