반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코틀린
- 자료구조
- Render object tree
- 싱글톤
- 에러
- 프리즈드
- 완전탐색
- linebreak
- zwj
- Singleton
- dart
- 자바
- 플러터 동작
- 플러터
- element tree
- 비동기 처리
- Kotlin
- 프로그래머스
- flutter
- 초기화
- 거리알고리즘
- 재귀
- dfs
- Android
- Widget Tree
- 앱아이콘 변경
- 알고리즘
- Lazy
- IOS
- Java
Archives
- Today
- Total
모바일 개발하는 자바리안의 메모장
자바(JAVA) - 메뉴 리뉴얼(Programmers : 72411) 본문
반응형
https://programmers.co.kr/learn/courses/30/lessons/72411
단순한 String관련 문제인 줄 알았으나,, 각 course 길이의 음식 조합을 카운트 하는 게 핵심인 문제였다.
dfs 기반의 combination 함수를 이용하여 가능한 모든 조합을 구할 수 있었다.
각 코스와 조합된 메뉴의 개수가 동일할 경우 Map에 넣어주며, 중복되는 메뉴들은 value로 카운트 해준 뒤에 value 기준으로 정렬.
정렬된 맵에서 가장 많이 카운트된 조합 + 2명 이상이 주문했는지 확인하며 각 코스에 대한 메뉴 구성을 선택해주면된다.
import java.util.*;
class Solution {
boolean[] visited;
HashMap<String, Integer> countMap;
public String[] solution(String[] orders, int[] course) {
ArrayList<String> answerList = new ArrayList<String>();
for(int c : course) {
countMap = new HashMap<String, Integer>();
for(String order : orders) {
String[] charArr = order.split("");
Arrays.sort(charArr);
visited = new boolean[order.length()];
combination( charArr,0, c);
}
List<Map.Entry<String, Integer>> sortedEntries = new LinkedList<Map.Entry<String, Integer>>(countMap.entrySet());
Collections.sort(sortedEntries, new Comparator<Map.Entry<String,Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue() - o1.getValue();
}
});
int max = 0;
for(Map.Entry<String, Integer> entry : sortedEntries) {
int count = entry.getValue();
if (count > 1 && count >= max) {
max = count;
answerList.add(entry.getKey());
}
if (max != 0 && entry.getValue() < max) {
break;
}
}
System.out.println(sortedEntries);
System.out.println(answerList);
}
String[] answer = answerList.toArray(new String[answerList.size()]);
Arrays.sort(answer);
return answer;
}
public void combination(String[] arr, int ptr, int r) {
if (r == 0) {
String combStr = "";
for (int i = 0; i < arr.length; i++) {
if (visited[i]) {
combStr += arr[i];
}
}
if (countMap.containsKey(combStr)) {
int count = countMap.get(combStr);
countMap.replace(combStr, count + 1);
} else {
countMap.put(combStr, 1);
}
} else {
for (int i = ptr; i < arr.length; i++) {
if(!visited[i]) {
visited[i] = true;
combination(arr,i + 1, r - 1);
visited[i] = false;
}
}
}
}
}
반응형
'Java > Java.algorithm' 카테고리의 다른 글
자바(JAVA) - 튜플(Programmers : 64065) (0) | 2022.03.19 |
---|---|
자바(JAVA) - 괄호 변환(Programmers : 12973) (0) | 2022.03.16 |
자바(JAVA) - 단체사진 찍기(Programmers : 1835) (0) | 2022.03.13 |
자바(JAVA) - 124 나라의 숫자(Programmers : 12899) (0) | 2022.03.13 |
자바(JAVA) - 짝지어 제거하기(Programmers : 12973) (0) | 2022.03.13 |
Comments