https://school.programmers.co.kr/learn/courses/30/lessons/72411
1. orders를 오름차순으로 정렬한다.
2-1. 모든 orders[i] 에 대해, course[j] 개의 원소를 뽑은 수열 (조합)을 도출한다.
2-2. 뽑은 수열들을 map<key, value>에 merge한다.
2-3. 동시에, 가장 높은 value를 mapMax로 놓는다.
3. map을 순회하며, value가 mapMax인 key를 list에 넣는다.
4. list를 정렬하고 배열로 바꿔 리턴한다.
import java.util.*;
class Solution {
int O, C, mapMax;
Map<String, Integer> map = new HashMap<>();
List<String> total = new ArrayList<>();
void solve(int S, String s, int depMax, int dep, int st, String now) {
if(dep == depMax) {
map.merge(now, 1, (ov, nv) -> {
mapMax = Math.max(ov + 1, mapMax);
return ov + 1;});
return;
}
for(int i=st; i<S; i++) {
solve(S, s, depMax, dep + 1, i + 1, now + s.charAt(i));
}
}
public String[] solution(String[] orders, int[] course) {
O = orders.length;
C = course.length;
for(int i=0; i<O; i++) {
StringBuilder sb = new StringBuilder();
char[] tmp = orders[i].toCharArray();
Arrays.sort(tmp);
for(int j=0; j<tmp.length; j++) {
sb.append(tmp[j]);
}
orders[i] = sb.toString();
}
for(int i=0; i<C; i++) {
map.clear();
mapMax = 0;
List<String> courseList = new ArrayList<>();
int c = course[i];
for(int j=0; j<O; j++) {
String s = orders[j];
int S = s.length();
// 요구하는 코스의 길이보다 주문 메뉴가 작은 경우
// course 배열에는 같은 값이 중복해서 들어있지 않습니다.
if(c > S) continue;
solve(S, s, c, 0, 0, "");
}
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if(entry.getValue() == mapMax) {
total.add(entry.getKey());
}
}
}
Collections.sort(total);
int T = total.size();
String[] answer = new String[T];
for(int i=0; i<T; i++)
answer[i] = total.get(i);
return answer;
}
}
'[프로그래머스] 절대 외부 IDE를 써선 안돼 > Java' 카테고리의 다른 글
[lv3] 선입 선출 스케줄링 (0) | 2024.11.16 |
---|---|
[lv2] 수식 최대화 (0) | 2024.11.16 |
[lv2] 튜플 (1) | 2024.11.15 |
[lv3] 양과 늑대 (2) | 2024.11.13 |
[v2] 무인도 여행 (2) | 2024.11.11 |