본문 바로가기
Programming/Algorithm

순열

by OKOK 2018. 1. 23.

#include <stdio.h>

#include <iostream>

int data[] = { 1,2,3};


int swap(int i, int j) {

int temp;

if (i == j) return 0;

temp = data[i];

data[i] = data[j];

data[j] = temp;

return 0;

}


int Permutation(int TotalN, int N)

{

int i;

if (N == 1) {

for (i = 0; i < TotalN; i++) {

printf("%d ", data[i]);

}

printf("\n");

return 0;

}


for (i = 0; i < N; i++) {

swap(i, N - 1);

Permutation(TotalN, N - 1);

swap(i, N - 1);

}

}


int main()

{

int N = sizeof(data) / sizeof(int);

Permutation(N, N);



system("pause");

return 0;

}


/*


*/


재귀함수 풀이하기

순열과 스왑을 만들어서 순열 조합 만들기, 오께이.


순열(3,3) 123

아이 0


스왑(0,2) 321

순열(3,2)

아이0

스왑(0,1) -> 231

순열(3,1) -> 231 출력

스왑(0,1) -> 321


아이1

스왑(1,1) -> 321

순열(3,1) -> 321 출력

스왑(1,1) -> 321


아이2

스왑(2,1) -> 312

순열(3,1) -> 312 출력

스왑(2,1) -> 321


스왑(0,2) 123




아이는 0,1,2,3,4,5,6,7,8,9, 총 10번을 돌게 됩니다. 그리고 만약 어레이 안에서 키를 서치해서 펄스가 나오면 유니크어레이에 유니크어레이 카운트에 찾은 어레이를 더하면 됩니다. 오케이요.  


i 가 0부터 9까지인데 아이를 00이라고 하면 만약 어래에[0] 이 key 이면 같으면 트루를 같은 값이 나오면 트르룰 내보냅니다. 같은 값을 찾지 못하면 펄스를 내보냅니다. 아 잠깐만 이게 포인터로 되어 있어서, 조금 헷갈리는 경향이 있긴 한데, 같은 파라미터로 키를 넣어서, 넣어서 넣어서, 넣어서, 넣어서 넣어서 서치키 어레이에서 가튼 같을 찾아고 다른 값이면 어레이 하나를 저장하는 식으로 되어 있습니다. 그럼 이것을 사용해서


어레이를 하나 만들고

같은 값이 있으면, 그 같은 값으 가진 어레이에 대해서 점수를 올려주도록 합니다. 오케이 저렇게 하나씩 늘려 가는 것은 좋은 것 같습니다. 그리고 if 같으면 arr[i] 에 대해서도 값을 올려주도록 합니다.