📍 문제 설명
https://programmers.co.kr/learn/courses/30/lessons/72411?language=java
💡 접근
손님별 2개 이상의 모든 단품 메뉴 조합을 만들어야 했다.
그리고 그 만든 조합 기준으로 value값 기준으로 리스트를 내림차순 정렬해야했다.
그래야 코스요리 메뉴 구성에 들어갈 리스트에 잘못된 값이 들어가지 않는다!
리스트에 해쉬맵의 키들을 담아서 해쉬맵에 담긴 value 값을 기준으로 내림 차순 정렬하는 방법에 대해서 숙지하고 있어야겠다!
👩💻 코드
import java.io.*;
import java.util.*;
public class Solution {
static HashMap<String, Integer> map = new HashMap<>();
public String[] solution(String[] orders, int[] course) {
//각 손님들이 주문한 단품메뉴들이 문자열 형식으로 담긴 배열 orders
//"스카피"가 추가하고 싶어하는 코스요리를 구성하는 단품메뉴들의 갯수가 담긴 배열 course
String[] answer = {};
//일단 각 손님들의 요리를 오름차순 정렬
for(int i = 0; i < orders.length; i++) {
char[] ch = orders[i].toCharArray();
Arrays.sort(ch);
orders[i] = String.valueOf(ch);
}
for(int i = 0; i < orders.length; i++) {
DFS(0, "", orders[i]);
}
//코스요리 메뉴 구성 들어갈 리스트
List<String> list = new ArrayList<>();
//맵에 담긴 키를 담는 리스트
List<String> keySetList = new ArrayList<>(map.keySet());
//value 기준으로 리스트 내림차순 정렬
Collections.sort(keySetList, (o1, o2) -> (map.get(o2).compareTo(map.get(o1))));
//코스요리 갯수별 최대 주문 수를 가진 키 넣기
for (int i = 0; i < course.length; i++) {
int max_value = 0;
for (String key : keySetList) {
if (map.get(key) >= 2 && key.length() == course[i]) {
//갯수 별 같은 최대 주문 수도 넣어줘야 한다.
if (map.get(key) >= max_value) {
list.add(key);
max_value = map.get(key);
}
}
}
}
answer = new String[list.size()];
list.toArray(answer);
Arrays.sort(answer);
return answer;
}
private void DFS(int L, String s, String order) {
if(L == order.length()) {
if(s.length() <= 1) return;
System.out.println(s);
map.put(s, map.getOrDefault(s, 0) + 1);
}
else {
DFS(L+1, s + order.charAt(L), order);
DFS(L+1, s, order);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Solution s = new Solution();
s.solution(new String[]{"ABCFG", "AC", "CDE", "ACDE", "BCFG", "ZACDEH"}, new int[]{2, 3, 4});
}
}
'Algorithm > programmers' 카테고리의 다른 글
[2021 카카오 인턴십]거리두기 확인하기 (0) | 2022.03.28 |
---|---|
[2018 카카오 블라인드 1차]뉴스 클러스터링 (0) | 2022.03.28 |
[2021 데브매칭]행렬 테두리 회전하기 (0) | 2022.02.24 |
타겟넘버 (0) | 2022.02.24 |
더 맵게 (0) | 2022.02.24 |