[프로그래머스] 메뉴 리뉴얼(72411)

lhs's avatar
Jan 11, 2025
[프로그래머스] 메뉴 리뉴얼(72411)
 

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

LHS's Study Space