1. 문제 풀이 아이디어
- 문자열 조합을 생성하고 이를
Map
에 저장해 빈도를 계산하는 방식으로 문제를 해결할 수 있다.
StringBuilder
와 재귀를 사용해 문자열 조합을 효율적으로 생성한다.
TreeSet
을 활용해 결과를 정렬된 상태로 저장한다.
2. 나의 정답 코드
class Solution {
Map<String, Integer> map;
char[] charArray;
int count;
int max;
int length;
StringBuilder stringBuilder = new StringBuilder();
public String[] solution(String[] orders, int[] course) {
Set<String> answer = new TreeSet<>();
for (int i : course) {
map = new HashMap<>();
max = 0;
length = i;
for (String order : orders) {
count = 0;
charArray = order.toCharArray();
Arrays.sort(charArray);
addMap(0);
}
if (max < 2) continue;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() == max) {
answer.add(entry.getKey());
}
}
}
return answer.toArray(new String[0]);
}
public void addMap(int n) {
for (int i = n; i < charArray.length; i++) {
stringBuilder.append(charArray[i]);
count++;
if (count < length) {
addMap(i + 1);
} else {
int value = map.getOrDefault(stringBuilder.toString(), 0) + 1;
map.put(stringBuilder.toString(), value);
max = Math.max(max, value);
}
count--;
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
}
}
}
3. 정리
- 입력된 주문 데이터를 기반으로 특정 길이의 조합을 생성하고 이를 빈도수와 함께 저장한다.
TreeSet
을 이용해 조합 결과를 자동으로 정렬한다.
- 재귀를 사용해 조합을 생성하며,
StringBuilder
를 활용해 효율적으로 문자열을 관리한다.
Map
을 통해 각 조합의 빈도를 기록하고, 최빈값을 기준으로 결과를 필터링한다.
- 최종적으로 정렬된 조합들을 배열로 반환하여 사용자가 원하는 형식의 결과를 얻을 수 있다.
Share article