안녕하세요 안펍여러분..
한 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
엄청 잘 동작하니 잘 만드셨죠~
아마 배우신지 너무 오래되서 기억이 가물하신 거일텐데,
중학교때도 배우고 대학가서는 Discrete Mathematics에서 배우는 Permutation(순열)이죠.
구글에 permutation matrix java, permutation matrix c++ 등으로 치면 나올거에요.
덕분에 Discrete Mathematics 배울 때 Permutation, Combination등이랑 씨름하던 추억이 새록새록하네요ㅋ