완전 제 멋대로 풀어봤습니다.
문제에 워낙 조건과 요구사항이 많지만... 제 생각에 문제 풀이에 중요한 조건은 다음과 같습니다.
- 코스요리 메뉴는 최소 2가지 이상의 단품메뉴로 구성
- 최소 2명 이상의 손님으로부터 주문된 단품메뉴 조합에 대해서만 코스요리 메뉴 후보에 포함
즉, 간단하게 말하면 'AB'처럼 문자열 길이가 2 이상이고, 'AB'가 주문된 횟수가 2 이상일 때만 포함시키면 되겠습니다.
코스 요리 조합이 나올 수 있는 경우의 수를 combination을 통해서 다 찾았습니다. 그리고 Map에 key로 메뉴의 조합을, value로 주문 횟수를 넣어 저장합니다.
이차원 배열 courseArr을 만들어 courseArr[n][0]에는 메뉴 조합을, courseArr[n][1]에는 주문 횟수를 저장합니다. 이 배열을 통해서 가장 주문 횟수가 많은 메뉴를 찾아줍니다.
발상은 알겠는데 구현이 꽤 오래 걸렸습니다. 더 효율적인 방법이 있을 것 같기도 하네요
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
const final = [];
const map = new Map();
function combination(source, target, n, r, count) {
if (r === 0) {
const key = target.sort().join('');
const val = map.get(key) || 0;
map.set(key, val+1);
}
else if (n === 0 || n < r) {
return;
}
else {
target.push(source[count]);
combination(source, [].concat(target), n - 1, r - 1, count + 1);
target.pop();
combination(source, [].concat(target), n - 1, r, count + 1);
}
}
function solution(orders, course) {
var courseArr = Array.from(Array(11), () => Array(2).fill(0))
var answer = [];
for (const order of orders) {
for (let i = 2; i <= order.length; i++) {
combination(order, [], order.length, i, 0);
}
}
for(let [key, value] of map) {
if (value > 1 && course.includes(key.length)) {
const cnt = courseArr[key.length][1];
if (!cnt) {
courseArr[key.length][0] = [key];
courseArr[key.length][1] = value;
continue;
}
if (courseArr[key.length][1] < value) {
courseArr[key.length][0] = [key];
courseArr[key.length][1] = value;
} else if (cnt == value) {
courseArr[key.length][0].push(key);
}
}
}
for (let i = 0; i < courseArr.length; i++) {
if (courseArr[i][0].length >= 1) {
answer.push(...courseArr[i][0]);
}
}
answer.sort();
return answer;
}
|
cs |
'개발 > 알고리즘' 카테고리의 다른 글
[백준 11279][Python] 최대힙 자료구조 직접 구현하기, 시간초과 나는 이유 (0) | 2021.05.29 |
---|---|
[프로그래머스][Javascript] 타겟 넘버 (0) | 2021.04.25 |
[프로그래머스][Javascript] 체육복 (0) | 2021.04.25 |
[백준1021][Java] 회전하는 큐 (0) | 2020.04.29 |
[C++][백준 2178] 미로탐색 - 가중치가 없는 그래프의 최단경로? (0) | 2020.03.13 |
댓글