Lv 2. 메뉴 리뉴얼

2024. 8. 11. 21:17·Algorithm & Data Structures/Programers

코드 흐름

  • map: 메뉴 조합을 키로, 그 조합이 등장한 횟수를 값으로 저장하는 해시맵선언.
    max: 현재 탐색 중인 코스 길이에서 가장 많이 등장한 메뉴 조합의 빈도를 저장하는 변수.
  • DFS 메서드: 주어진 order에서 가능한 메뉴 조합을 생성하고, 그 조합을 map에 저장하여 등장 횟수를 기록.
    • order: 현재 탐색 중인 주문의 메뉴 문자열.
    • index: 현재 탐색 중인 문자열의 인덱스.
    • key: 현재까지 생성된 메뉴 조합 문자열.
    • end: 탐색할 메뉴 조합의 목표 길이.
    • depth: 현재 조합의 길이.
    • 조합의 길이가 목표 길이(end)에 도달하면, 해당 조합을 map에 저장하고 max를 업데이트.
      그렇지 않으면, 다음 인덱스부터 시작하여 재귀적으로 DFS를 호출하여 메뉴 조합을 생성.
  • solution 메서드:
    • 입력된 주문(orders)과 코스 길이(course)를 바탕으로 인기 있는 메뉴 조합탐색.
      • orders: 각 손님의 주문을 나타내는 문자열 배열.
      • course: 찾고자 하는 메뉴 조합의 길이 배열.
        1. course 배열을 순회하면서, 각 길이 c에 대해 다음을 수행
        2. map과 max를 초기화하여 새로운 코스 길이의 조합을 저장할 준비.
        3. 각 주문(or)에 대해 메뉴를 정렬하고, DFS를 호출하여 해당 길이의 모든 메뉴 조합을 탐색.
        4. DFS가 끝난 후, map에서 max와 동일한 빈도를 가진 조합을 결과 리스트(ans)에 추가.
        5. 모든 코스 길이에 대해 탐색이 끝나면, 결과 리스트를 정렬하고 문자열 배열로 변환하여 반환.
import java.util.*;

class Solution {
    Map<String,Integer> map = new HashMap<>();
    int max = 0 ;
    public void DFS (String order, int index, String key, int end,int depth){
        if(end == depth){
            map.put(key,map.getOrDefault(key,0)+1);
            max = Math.max(map.get(key),max);
        }
        for(int i = index + 1 ; i < order.length() ; i++){
            DFS(order,i,key+order.charAt(i),end,depth+1);
        }
    }
    public String[] solution(String[] orders, int[] course) {
        ArrayList<String> ans = new ArrayList<>();
        for(int c : course){
            map = new HashMap<>();
            max = 0;
            for(String or: orders){
                char[] o = or.toCharArray();
                Arrays.sort(o);
                String order = new String(o);
                DFS(order,-1,"",c,0);
            }
            for(String key : map.keySet()){
                int value = map.get(key);
                if(value > 1 && max == value)
                    ans.add(key);
            }
        }
        Collections.sort(ans);
        String[] answer = ans.toArray(new String[ans.size()]);
        return answer;
    }
}

 

'Algorithm & Data Structures > Programers' 카테고리의 다른 글

Lv 2. 하노이의 탑  (0) 2024.08.13
Lv 2. 숫자 카드 나누기  (0) 2024.08.12
Lv 2. 호텔 대실  (0) 2024.08.09
Lv 2. 시소 짝궁  (0) 2024.08.08
Lv 2. 마법의 엘리베이터  (1) 2024.08.06
'Algorithm & Data Structures/Programers' 카테고리의 다른 글
  • Lv 2. 하노이의 탑
  • Lv 2. 숫자 카드 나누기
  • Lv 2. 호텔 대실
  • Lv 2. 시소 짝궁
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (316)
      • Algorithm & Data Structures (238)
        • BOJ (96)
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (25)
        • SQL (19)
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Union-Find
    Java
    BFS
    이분탐색
    후위순회
    DynamicProgramming
    알고리즘
    백트래킹
    프로그래머스
    Dijkstra
    SQL
    baekjoon
    Stack
    경로압축
    programmers
    전위순회
    dp
    dfs
    동적계획법
    백준
    unionfind
    스택
    투포인터
    PriorityQueue
    유니온파인드
    구현
    골드
    binarySearch
    다익스트라
    algorithm
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
Lv 2. 메뉴 리뉴얼
상단으로

티스토리툴바