반응형
Notice
Recent Posts
Recent Comments
Link
It's easy, if you try
[프로그래머스] 메뉴 리뉴얼 (Java) / 조합 / 문자열 / HashMap 본문
반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/72411?language=java
풀이
import java.util.*;
class Solution {
static HashMap<String, Integer> hm;
public String[] solution(String[] orders, int[] course) {
hm = new HashMap<>();
for(String o: orders) {
char[] order = o.toCharArray();
Arrays.sort(order);
for(int i=0; i< course.length; i++) {
combination(0, 0, course[i], order, "");
}
}
int[] maxCntOfCourse = new int[course[course.length -1] +1]; // course가 2,3,4인 경우 0~4까지
for(String key: hm.keySet()) {
// 최소 2명 이상의 손님으로부터
if(hm.get(key) >= 2) {
maxCntOfCourse[key.length()] = Math.max(hm.get(key), maxCntOfCourse[key.length()]);
}
}
// maxCntOfCourse에 각 코스별 가장 많이 주문된 횟수가 채워진 상태
List<String> answerTemp = new ArrayList<>();
for(String key: hm.keySet()) {
for(int i=0; i< maxCntOfCourse.length; i++) {
if(maxCntOfCourse[i] == 0) continue;
if(key.length() == i && hm.get(key) == maxCntOfCourse[i]) {
answerTemp.add(key);
}
}
}
Collections.sort(answerTemp);
String[] answer = new String[answerTemp.size()];
int i=0;
for(String str: answerTemp) {
answer[i++] = str;
}
return answer;
}
private static void combination(int cnt, int start, int limit, char[] order, String result) {
if(cnt == limit) {
hm.put(result, hm.getOrDefault(result, 0)+1);
return;
}
for(int i=start; i< order.length;i++) {
combination(cnt+1, i+1, limit, order, result+order[i]);
}
}
}
반응형
'알고리즘 > 자바(Java)' 카테고리의 다른 글
[백준/boj] 1920: 수 찾기 (Java) / 이분 탐색 / 분할 정복 (0) | 2021.07.08 |
---|---|
[백준/boj] 10211: Maximum Subarray (Java) / 분할 정복 / DP (0) | 2021.07.08 |
[프로그래머스] 이진 변환 반복하기 (Java) / 문자열 / 수학 / Stack (0) | 2021.07.02 |
[goorm] 최소 이동 비용 (Java) / BFS / DP (0) | 2021.06.30 |
[프로그래머스] 가장 먼 노드 (Java) / 다익스트라 알고리즘 (0) | 2021.06.30 |
Comments