프로그래머스 - 메뉴 리뉴얼
해당 문제는 입력받은 orders로 만들수 있는 모든 메뉴의 갯수 및 중복된 조합이 들어오면 count를늘리는 식으로 course의 종류와 주문 횟수를 저장 한 후 이후 course를 구성할 때 가장인기있는 메뉴만 선택 하여 answer 메뉴를만들어 주는식으로 문제를 구현했습니다.
처음에는 가장 인기있는 메뉴 라는 조건을 놓쳐 모든 경우의 수중 2번 이상 주문된 적 있는 메뉴들을 리턴해 주려고 해서 문제가 있었습니다.
private Map<String, Integer> courseMap;
public String[] solution(String[] orders, int[] course) {
courseMap = new HashMap<>();
List<String> answer = new ArrayList<>();
for (String order : orders) {
char[] orderChar = order.toCharArray();
Arrays.sort(orderChar);
String sortedOrder = new String(orderChar);
dfs("", sortedOrder);
}
for (int courseSize : course) {
AtomicInteger maxOrderCount = new AtomicInteger(2);
List<String> courseList = new ArrayList<>();
courseMap.forEach((courseName, orderCount) -> {
if (orderCount >= maxOrderCount.get() && courseName.length() == courseSize) {
if (orderCount > maxOrderCount.get()) {
courseList.clear();
maxOrderCount.set(orderCount);
}
courseList.add(courseName);
}
});
answer.addAll(courseList);
}
answer.sort(String::compareTo);
return answer.toArray(new String[0]);
}
private void dfs(String preString, String remainString) {
for (int i = 0; i < remainString.length(); i++) {
String course = preString + remainString.charAt(i);
if (course.length() > 1) {
courseMap.put(course, courseMap.getOrDefault(course, 0) + 1);
}
dfs(course, remainString.substring(Math.min(i + 1, remainString.length())));
}
}
'정리 > 알고리즘' 카테고리의 다른 글
프로그래머스 - 괄호 변환 (0) | 2022.04.13 |
---|---|
프로그래머스 - 실패율 (0) | 2022.04.11 |
프로그래머스 - 짝지어 제거하기 (0) | 2022.04.07 |
프로그래머스 - 124 나라의 숫자 (0) | 2022.04.06 |
프로그래머스 - 폰켓몬 (0) | 2022.04.05 |
댓글