From f059cce88cf9d65361f7b6258f471fdb9feb1a01 Mon Sep 17 00:00:00 2001 From: jiyeon-agnes-lee Date: Mon, 27 Jun 2022 00:32:02 +0900 Subject: [PATCH] 220627_solve : Programmers_lee Lv2-(1) --- ...\246\254\353\211\264\354\226\274_lee.java" | 70 ++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git "a/0628/Programmers/Lv2/\353\251\224\353\211\264 \353\246\254\353\211\264\354\226\274_lee.java" "b/0628/Programmers/Lv2/\353\251\224\353\211\264 \353\246\254\353\211\264\354\226\274_lee.java" index 8b13789..7840d96 100644 --- "a/0628/Programmers/Lv2/\353\251\224\353\211\264 \353\246\254\353\211\264\354\226\274_lee.java" +++ "b/0628/Programmers/Lv2/\353\251\224\353\211\264 \353\246\254\353\211\264\354\226\274_lee.java" @@ -1 +1,69 @@ - +import java.util.HashMap; +import java.util.ArrayList; +import java.util.Arrays; +class Solution { + static ArrayList orderList; + public String[] solution(String[] orders, int[] course) { + + HashMap map = new HashMap(); + StringBuilder sb = new StringBuilder(); + // 주문 종류별 개수 구하기 + for(int i = 0 ; i < orders.length; i++) { + char[] originOrder = orders[i].toCharArray(); + // 문자 오름차순 정렬 + Arrays.sort(originOrder); + int len = originOrder.length; + orderList = new ArrayList(); + // 부분집합 + powerset(originOrder, new boolean[len], len, 0); + for(String order : orderList) { + // 존재하면 개수 증가, 없으면 추가 + if(map.containsKey(order)) { + int cnt = map.get(order); + map.put(order, ++cnt); + }else map.put(order, 1); + } + } + ArrayList list = new ArrayList<>(); + for(int i = 0; i < course.length; i++) { + // 구하고자 하는 코스 메뉴 개수 + int courseLen = course[i]; + // 가장 많이 선택된 횟수 + int maxOrderCnt = 0; + // 최대 횟수 구하기 + for(String key : map.keySet()) { + int cnt = map.get(key); + if(cnt > 1 && courseLen == key.length()){ + if(cnt > maxOrderCnt) + maxOrderCnt = cnt; + } + } + // 최대 횟수에 해당하는 메뉴 조합이 여러개 일 수 있어서 한 번 더 구함 + for(String key : map.keySet()) { + if(courseLen == key.length() && map.get(key) == maxOrderCnt) + list.add(key); + } + } + // 문자열 오름차순 정렬 + String[] answer = list.toArray(new String[list.size()]); + Arrays.sort(answer); + return answer; + } + // 부분집합 + public static void powerset(char[] order, boolean[] visited, int len, int idx) { + if(idx == len) { + StringBuilder sb = new StringBuilder(); + for(int i= 0 ; i < len; i++) { + if(visited[i]) + sb.append(order[i]); + } + if(sb.length() >= 2) + orderList.add(sb.toString()); + return; + } + visited[idx] = false; + powerset(order, visited, len, idx+1); + visited[idx] = true; + powerset(order, visited, len, idx+1); + } +} \ No newline at end of file