programmers_메뉴 리뉴얼_java
2023. 4. 17. 10:26ㆍAlgorithm/Programmers
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/72411
import java.util.*;
import java.util.Map.Entry;
class Solution {
public String[] solution(String[] orders, int[] course) {
String[] answer = {};
List<String> answerList = new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
for(String order : orders){
char[] arr = order.toCharArray();
Arrays.sort(arr); // 문자열 정렬
makeCourse(String.valueOf(arr), 0, course, map, "", false);
}
// Map 정렬 (길이가 짧은순서, value가 큰 순서)
// Map.Entry 리스트 작성
List<Entry<String, Integer>> list_entries = new ArrayList<Entry<String, Integer>>(map.entrySet());
// 비교함수 Comparator를 사용하여 오름차순으로 정렬
Collections.sort(list_entries, new Comparator<Entry<String, Integer>>() {
// compare로 값을 비교
public int compare(Entry<String, Integer> obj1, Entry<String, Integer> obj2) {
int lengthSort = obj1.getKey().length() - obj2.getKey().length();
if(lengthSort == 0){ // 길이가 같은 경우
return obj2.getValue() - obj1.getValue();
}else{ // 길이가 다른 경우
return obj1.getKey().length() - obj2.getKey().length();
}
}
});
// 정렬 확인
// for(Entry<String, Integer> tmp : list_entries){
// System.out.println(tmp.getKey() + " " + tmp.getValue());
// }
// answer 찾기
int courseLeng = 0;
int size = 0;
for(Entry<String, Integer> entry : list_entries) {
if(entry.getValue() == 1) continue;
if(entry.getKey().length() > courseLeng){ // 길이가 긴 값 나올 경우
size = entry.getValue();
courseLeng = entry.getKey().length();
answerList.add(entry.getKey());
}else if(entry.getKey().length() == courseLeng && entry.getValue() == size){ // 같은 길이 같은 값일 경우
answerList.add(entry.getKey());
}
}
Collections.sort(answerList);
// System.out.println(answerList.toString());
answer = new String[answerList.size()];
int i = 0;
for(String s : answerList){
answer[i++] = s;
}
return answer;
}
// 코스 요리 추가
public void makeCourse(String order, int cnt, int[] course, Map<String, Integer> map, String menu, boolean isbefore){
int menuLength = menu.length();
if(!isbefore){
for(int i : course){
if(i == menuLength){
map.put(menu, map.getOrDefault(menu, 0) + 1);
break;
}
}
}
if(cnt >= order.length()) return;
makeCourse(order, cnt+1, course, map, menu+order.charAt(cnt), false); // 포함
makeCourse(order, cnt+1, course, map, menu, true); // 포함 x
}
}
'Algorithm > Programmers' 카테고리의 다른 글
programmers_택배상자_java (0) | 2023.04.17 |
---|---|
programmers_두 큐 합 같게 만들기_java (0) | 2023.04.17 |
programmers_삼각 달팽이_java (0) | 2023.04.16 |
programmers_124 나라의 숫자_java (0) | 2023.04.16 |
programmers_롤케이크 자르기_java (0) | 2023.04.16 |