더북(TheBook)

위 해법은 결과를 화면에 출력한다. 결과를 저장하고 싶으면 구현에 Set을 추가해야 한다. 중복을 제거해주므로 Set을 쓰는 편이 좋다.

public static Set<String> permuteAndStore(String str) {
  return permuteAndStore("", str);
}

private static Set<String>
  permuteAndStore(String prefix, String str) {
    Set<String> permutations = new HashSet<>();
    int n = str.length();

    if (n == 0) {
      permutations.add(prefix);
    } else {
      for (int i = 0; i < n; i++) {
        permutations.addAll(permuteAndStore(prefix + str.charAt(i),
          str.substring(i + 1, n) + str.substring(0, i)));
      } 
    }

    return permutations;
  }

가령 TEST라는 문자열을 전달하면 Set은 다음과 같은 출력을 생성한다(모두 고유한 순열이다).

ETST SETT TEST TTSE STTE STET TETS TSTE TSET TTES ESTT ETTS

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.