안녕하세요 안펍여러분..


한 1시간 넘게 뻘짓하다 완성된게 있어서 기쁜 마음에 공유하려고 합니다 

물론.. 제가 알고리즘을 찾지 못해서 생긴 불상사 일지도 모르겠습니다


일단 .. 모든 경우의 수에서 중복된 경우를 제외하고 나머지를 출력하는걸 만들었습니다. 

예를들어 1 , 2 , 3 이라는 숫자가 중복되지 않고 자리를 바꾸는 경우의 수...


1 , 2 , 3

1 , 3 , 2

2 , 1 , 3

2 , 3 , 1

3 , 1 , 2

3 , 2 , 1 


이렇게 3 * 2 * 1 의 경우의 수로 총 6가지가 있는데..

이걸 허접하게 만들어 보았습니다.


아 .. 그리고.. 이런 알고리즘 나온거 있음 알려주시고요 ㅠㅠ


---- Main.java ----

public class Main {


static int[] printNumbers = null;


public static void main(String[] args) {



int[] test = new int[] { 1, 2, 3, 4};

printNumbers = new int[test.length];

numberOfCase(test, 0);

}


public static void print(int[] nums) {

String print = "";

for (int i = 0; i < nums.length; i++) {

print += nums[i];

}


System.out.println(print);


}


public static void numberOfCase(int[] numbers, int index) {

if (index >= numbers.length) {

print(printNumbers);

return;

}


printNumbers[printNumbers.length - numbers.length] = numbers[index];


int[] temp = new int[numbers.length - 1];


int position = 0;

for (int i = 0; i < numbers.length; i++) {

if (i == index) {

continue;

}


temp[position++] = numbers[i];


}


index++;


numberOfCase(temp, 0);


if (index < numbers.length) {

numberOfCase(numbers, index);

}

}


}


---- 출력 결과 ----


1234

1243

1324

1342

1423

1432

2134

2143

2314

2341

2413

2431

3124

3142

3214

3241

3412

3421

4123

4132

4213

4231

4312

4321