[Programmers] : 2021 KAKAO > 메뉴 리뉴얼 > JAVA
- 💾 알고리즘/프로그래머스
- 2021. 10. 23. 10:23
🔗 문제
https://programmers.co.kr/learn/courses/30/lessons/72411?language=java
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
내코드
package com.kyhslam.programmers.kakao;
import java.util.*;
public class cp01 {
private static List<Map<String, Integer>> FoodMaps = new ArrayList<>();
private static int[] MaxCnt = new int[11];
public static void main(String[] args) {
String[] orders = {"ABCFG", "AC"};
int[] course = {2,3,4};
for (int i=0; i < 11; i++) {
FoodMaps.add(new HashMap<String, Integer>());
}
for (String str : orders) {
char[] arr = str.toCharArray();
Arrays.sort(arr);
//System.out.println("arr = " + arr);
comb(arr, 0, new StringBuilder());
}
System.out.println("FoodMaps = " + FoodMaps);
List<String> list = new ArrayList<>();
for(int len : course) {
for (Map.Entry<String, Integer> entry : FoodMaps.get(len).entrySet()) {
if (entry.getValue() >= 2 && entry.getValue() == MaxCnt[len]) {
list.add(entry.getKey());
}
}
}
Collections.sort(list);
String[] answer = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
System.out.println(Arrays.toString(answer));
}
private static void comb(char[] str, int pos, StringBuilder candi) {
if(pos >= str.length){
int len = candi.length();
if(len >= 2){
int cnt = FoodMaps.get(len).getOrDefault(candi.toString(),0) + 1;
FoodMaps.get(len).put(candi.toString(), cnt);
MaxCnt[len] = Math.max(MaxCnt[len], cnt);
}
return;
}
comb(str, pos+1, candi.append(str[pos]));
candi.setLength(candi.length()-1);
comb(str, pos+1, candi);
}
}
다른사람
import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.Arrays;
class Solution {
static HashMap<String,Integer> map;
static int m;
public String[] solution(String[] orders, int[] course) {
PriorityQueue<String> pq = new PriorityQueue<>();
for (int i=0;i<course.length;i++){
map = new HashMap<>();
m=0;
for (int j=0;j<orders.length;j++) {
find(0, "", course[i], 0, orders[j]);
}
for (String s : map.keySet()){
if (map.get(s)==m&&m>1){
pq.offer(s);
}
}
}
String ans[] = new String[pq.size()];
int k=0;
while (!pq.isEmpty()){
ans[k++] = pq.poll();
}
return ans;
}
static void find(int cnt,String str,int targetNum,int idx,String word){
if (cnt==targetNum){
char[] c = str.toCharArray();
Arrays.sort(c);
String temps="";
for (int i=0;i<c.length;i++)temps+=c[i];
map.put(temps,map.getOrDefault(temps,0)+1);
m = Math.max(m,map.get(temps));
return;
}
for (int i=idx;i<word.length();i++){
char now =word.charAt(i);
find(cnt+1,str+now,targetNum,i+1,word);
}
}
}
'💾 알고리즘 > 프로그래머스' 카테고리의 다른 글
[Programmers] : Summer/Winter > 소수만들기 (0) | 2021.11.02 |
---|---|
[Programmers] : 위클리 챌린지 > 최소직사각형 > JAVA (0) | 2021.11.01 |
[Programmers] : 해시 > 위장 > JAVA (0) | 2021.08.06 |
[Programmers] : 해시 > 전화번호 목록 > JAVA (0) | 2021.08.05 |
[Programmers] : 해시 > 완주하지 못한 선수 (0) | 2021.07.30 |