https://programmers.co.kr/learn/courses/30/lessons/72411
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
출처:
https://www.youtube.com/watch?v=22tBC3YXVPA&list=PL6YHvWRMtz7DhuPHdUZ0WLB5fNO729mbm&index=2
static List<Map<String,Integer>> FoodMaps = new ArrayList<>();
int[] MaxCnt = new int[11];
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);
}
public String[] solution(String[] orders, int[] course){
for(int i = 0; i <11; ++i)
FoodMaps.add(new HashMap<String,Integer>());
for(String str: orders){
char[] arr = str.toCharArray();
Arrays.sort(arr);
comb(arr,0, new StringBuilder());
}
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);
}
return answer;
}
'Algorithm' 카테고리의 다른 글
시뮬레이션_softeer 비밀메뉴 (0) | 2021.11.12 |
---|---|
시뮬레이션_Softeer 전광판 (0) | 2021.11.12 |
BruteForce_백준 연산자 끼워넣기 (0) | 2021.11.10 |
백트래킹DFS_백준 N과M(4) (0) | 2021.11.09 |
백트래킹DFS_백준 N과M(1) (0) | 2021.11.09 |