CodeWars 여든 아홉 번째 문제
Updated:
Permutations
public static List<String> singlePermutations(String s) {
HashSet<String> set = new HashSet<String>();
char[] charArray = s.toCharArray();
permutation(set, charArray, 0, charArray.length, charArray.length);
List<String> list = convertSet(set);
return list;
}
private static List<String> convertSet(HashSet<String> set) {
List<String> list = new ArrayList<String>();
Iterator<String> iter = set.iterator();
while(iter.hasNext()) {
list.add(iter.next());
}
return list;
}
static void permutation(HashSet<String> set, char[] arr, int depth, int n, int r) {
if (depth == r) {
set.add(String.valueOf(arr));
return;
}
for (int i=depth; i<n; i++) {
swap(arr, depth, i);
permutation(set, arr, depth + 1, n, r);
swap(arr, depth, i);
}
}
static void swap(char[] arr, int depth, int i) {
char temp = arr[depth];
arr[depth] = arr[i];
arr[i] = temp;
}
- 순열 문제였다. 그동안 갈고 닦은 재귀함수 실력으로 나름 풀어봤는데 오래 걸렸다.
- 그래도 이번 문제를 통해 조금 더 재귀에 대한 자신감이 붙었다.
- 위에 코드는 더 깔끔하게 풀 수 있는데 순열에서 더 나아가 조합 문제를 위해서 일단 남겨놨다.
- 그리고 위의 코드는 swap을 가지고 하는 건데 visit 배열을 이용해서 풀 수 있는데 그건 내일 가지고 할 예정이다.