반응형
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 |
Tags
- Java
- Lazy
- Event Loop
- 자료구조
- flutter
- Android
- 재귀
- 자바
- 앱아이콘 변경
- 거리알고리즘
- Render object tree
- IOS
- dart
- zwj
- 플러터 동작
- 코틀린
- microtask queue
- 싱글톤
- dfs
- 완전탐색
- 비동기 처리
- 에러
- 플러터
- Singleton
- 알고리즘
- 초기화
- 프로그래머스
- linebreak
- Kotlin
- element tree
Archives
- Today
- Total
모바일 개발하는 자바리안의 메모장
자바(JAVA) - 메뉴 리뉴얼(Programmers : 72411) 본문
반응형
https://programmers.co.kr/learn/courses/30/lessons/72411
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
단순한 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