https://programmers.co.kr/learn/courses/30/lessons/72411
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
저는 map을 통해 조합할 수 있는 알파벳이 몇번 나왔는지를 확인하였습니다. 이를 iterator를 통해 가장 많이 나온 횟수를 구하고 그 값과 같은 횟수만큼 나온 메뉴를 결과에 넣어서 해결하였습니다.
import java.util.*;
class Solution {
static Map<String,Integer>[] set;
static void pick(StringBuilder sb,char[] orderChar,int number,int index,int depth,int start){
if(depth == number){
set[index].merge(sb.toString(), 1, (v,nv)-> v+1);
}
for(int i = start ; i < orderChar.length ; i++){
sb.append(orderChar[i]);
pick(sb,orderChar,number,index,depth + 1, i+1);
sb.deleteCharAt(depth);
}
}
public String[] solution(String[] orders, int[] course) {
String[] answer = {};
set = new HashMap[course.length];
for(int i = 0 ; i < course.length ; i++){
set[i] = new HashMap<>();
}
for(String order : orders){
char[] orderChar = order.toCharArray();
Arrays.sort(orderChar);
for(int i = 0 ; i < course.length ; i++){
StringBuilder sb = new StringBuilder();
pick(sb,orderChar,course[i],i,0,0);
}
}
List<String> result = new ArrayList<>();
for(int i = 0 ; i < set.length ; i++){
int max = 0;
for(Map.Entry<String,Integer> elem : set[i].entrySet() ){
max = Math.max(max,elem.getValue());
}
// System.out.println("max:"+i+" "+max);
if(max >= 2){
for(Map.Entry<String,Integer> elem : set[i].entrySet() ){
if(elem.getValue() == max){
result.add(elem.getKey());
}
}
}
}
answer = new String[result.size()];
Collections.sort(result);
for(int i = 0 ; i < result.size(); i++){
answer[i] = result.get(i);
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 합승 택시 요금 (JAVA) (0) | 2021.12.29 |
---|---|
프로그래머스 이중우선순위큐 (JAVA) (0) | 2021.12.28 |
프로그래머스 신규 아이디 추천(JAVA) (0) | 2021.12.26 |
프로그래머스 행렬 테두리 회전 (JAVA) (0) | 2021.12.25 |
프로그래머스 더 맵게 (JAVA) (0) | 2021.12.24 |