코딩테스트/프로그래머스
[Java] 프로그래머스 - 메뉴 리뉴얼 (2단계)
배똥회장
2022. 4. 27. 16:24
728x90
코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | X |
본인의 실력으로 풀었는가? | O |
코딩테스트 연습 - 메뉴 리뉴얼
레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서
programmers.co.kr
import java.util.*;
class Solution {
HashMap<Integer, HashMap<String, Integer>> map;
public String[] solution(String[] orders, int[] course) {
ArrayList<String> answer = new ArrayList<>();
map = new HashMap<>();
for (int i = 0; i < orders.length; i++) {
char[] word = orders[i].toCharArray();
Arrays.sort(word);
orders[i] = new String(word);
}
for (int i = 0; i < orders.length; i++) {
String[] word = orders[i].split("");
func(word, new StringBuilder(), 0);
}
for (int i = 0; i < course.length; i++) {
HashMap<String, Integer> list = map.getOrDefault(course[i], new HashMap<>());
int max = 2;
ArrayList<String> temp = new ArrayList<>();
for (String key : list.keySet()) {
int length = list.get(key);
if (max < length) {
max = length;
temp = new ArrayList<>();
temp.add(key);
} else if (max == length) {
temp.add(key);
}
}
answer.addAll(temp);
}
Collections.sort(answer);
return answer.toArray(new String[answer.size()]);
}
public void func(String[] base, StringBuilder word, int p) {
HashMap<String, Integer> arr = map.getOrDefault(word.length(), new HashMap<>());
arr.put(word.toString(), arr.getOrDefault(word.toString(), 0) + 1);
map.put(word.length(), arr);
if (base.length == word.length()) return;
for (int i = p; i < base.length; i++) {
StringBuilder sb = new StringBuilder(word);
sb.append(base[i]);
func(base, sb, i+1);
}
}
}
테스트 1 〉 | 통과 (1.68ms, 69.6MB) |
테스트 2 〉 | 통과 (1.35ms, 75.3MB) |
테스트 3 〉 | 통과 (1.47ms, 71.4MB) |
테스트 4 〉 | 통과 (1.70ms, 79.4MB) |
테스트 5 〉 | 통과 (1.65ms, 69.5MB) |
테스트 6 〉 | 통과 (3.32ms, 73.5MB) |
테스트 7 〉 | 통과 (2.57ms, 81MB) |
테스트 8 〉 | 통과 (10.82ms, 92.1MB) |
테스트 9 〉 | 통과 (9.36ms, 79.9MB) |
테스트 10 〉 | 통과 (11.29ms, 92.3MB) |
테스트 11 〉 | 통과 (8.01ms, 86.6MB) |
테스트 12 〉 | 통과 (8.32ms, 79.4MB) |
테스트 13 〉 | 통과 (8.73ms, 80.8MB) |
테스트 14 〉 | 통과 (12.31ms, 81.5MB) |
테스트 15 〉 | 통과 (11.57ms, 85.4MB) |
테스트 16 〉 | 통과 (12.73ms, 89.9MB) |
테스트 17 〉 | 통과 (19.45ms, 93.4MB) |
테스트 18 〉 | 통과 (18.44ms, 82.1MB) |
테스트 19 〉 | 통과 (18.81ms, 91.7MB) |
테스트 20 〉 | 통과 (16.94ms, 89.8MB) |
orders의 단어들 일단 오름차순 정렬한다.
정렬한 orders 단어들을 하나씩 꺼내면서 만들 수 있는 단어 리스트를 만들면서 몇 번 만들어지는지를 체크한다
그리고 나서 course를 하나씩 꺼내면서 해당 길이에 대해서 가장 많이 조합된 단어를 answer에 넣는다
마지막으로 answer을 오름차순 정렬한 후 리턴한다.
728x90