티스토리 뷰
반응형
https://programmers.co.kr/learn/courses/30/lessons/72411
import java.util.*;
class Solution {
public String[] solution(String[] orders, int[] course) {
Restaurant restaurant = new Restaurant(orders, course);
return restaurant.checkCourseMenu().getCandidateMenu();
}
public static class Restaurant {
private static final PriorityQueue<String> pq = new PriorityQueue<>();
private static Map<String, Integer> map;
private int maxValue = 0;
private final String[] orders;
private final int[] course;
public Restaurant (String[] orders, int[] course) {
this.orders = orders;
this.course = course;
map = new HashMap<>();
}
public String[] getCandidateMenu() {
String[] ans = new String[pq.size()];
int k = 0;
while (!pq.isEmpty()){
ans[k++] = pq.poll();
}
return ans;
}
private Restaurant checkCourseMenu() {
for (int kind : course) {
map.clear();
maxValue = 0;
for(String order : orders) {
find(0, "",kind,0,order);
}
for (String key : map.keySet()) {
if (map.get(key) == maxValue && maxValue > 1){
pq.offer(key);
}
}
}
return this;
}
private void find(int count, String str, int aim, int idx, String order) {
if (count == aim){
char[] c = str.toCharArray();
Arrays.sort(c);
StringBuilder temps= new StringBuilder();
for (char value : c) temps.append(value);
map.put(temps.toString(),map.getOrDefault(temps.toString(),0)+1);
maxValue = Math.max(maxValue,map.get(temps.toString()));
return ;
}
for (int i=idx; i< order.length(); i++) {
char food = order.charAt(i);
find(count+1,str+food,aim,i+1,order);
}
}
}
}
이 문제의 접근 방법은 각 메뉴 갯수에 따른 손님이 주문한 메뉴들에서 조합의 갯수를 카운팅하여 그 중에서 최댓값들을 가진 메뉴들만 우선순위 큐에 저장하고 그에 대한 값을 반환하는 것이다.
checkCourseMenu
course의 갯수에 따른 각 사람에 따른 order의 최댓 갯수를 우선순위큐에 넣는 함수
find
조합의 경우를 만들어서 그에 대한 값을 map에 넣고, 해당 코스에 대한 최댓갑을 구하는 함수다.
getCandidateMenu
문제에서 원하는 답의 형태로 바꾸는 함수이다.
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [자바] [카카오] 튜플 (0) | 2021.12.17 |
---|---|
[프로그래머스] [자바] [카카오] 뉴스 클러스터링 (0) | 2021.12.15 |
[프로그래머스] [JAVA] 단체 사진 찍기 (0) | 2021.12.10 |
[프로그래머스] [JAVA] 카카오프렌즈 컬러링북 (0) | 2021.12.09 |
[프로그래머스] [자바] [카카오] 추석 트래픽 (0) | 2021.12.08 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Command Line
- docker-compose
- Pattern
- django
- DRF
- Linux
- 프로그래머스
- 파이썬
- BFS
- 그래프
- 알고리즘
- 면접
- postgres
- env
- thread
- 백준
- 자바
- 카카오
- Python
- dockerignore
- Collections
- headers
- Celery
- PostgreSQL
- setattr
- docker
- Spring
- Java
- ubuntu
- 2021 KAKAO BLIND RECRUITMENT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함