private List<String> answerList;
private Map<String, Integer> hashMap;
public String[] solution(String[] orders, int[] course) {
answerList = new ArrayList<>();
hashMap = new HashMap<>();
preprocessOrders(orders);
generateCombinations(orders, course);
return getAnswer();
}
private void preprocessOrders(String[] orders) {
for (int i = 0; i < orders.length; i++) {
char[] arr = orders[i].toCharArray();
Arrays.sort(arr);
orders[i] = String.valueOf(arr);
}
}
private void generateCombinations(String[] orders, int[] course) {
for (int courseLength : course) {
for (String order : orders) {
generateCombination("", order, courseLength);
}
checkAndAddValidCombinations();
hashMap.clear();
}
}
private void generateCombination(String current, String remaining, int count) {
if (count == 0) {
hashMap.put(current, hashMap.getOrDefault(current, 0) + 1);
return;
}
for (int i = 0; i < remaining.length(); i++) {
generateCombination(current + remaining.charAt(i), remaining.substring(i + 1), count - 1);
}
}
private void checkAndAddValidCombinations() {
if (!hashMap.isEmpty()) {
int maxFrequency = Collections.max(hashMap.values());
if (maxFrequency > 1) {
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
if (entry.getValue() == maxFrequency) {
answerList.add(entry.getKey());
}
}
}
}
}
private String[] getAnswer() {
Collections.sort(answerList);
return answerList.toArray(new String[0]);
}
출처:https://school.programmers.co.kr/learn/courses/30/lessons/72411