[プログラマー]メニュー更新-javascript
📌 質問する
https://programmers.co.kr/learn/courses/30/lessons/72411?language=javascript
📌 に答える
function solution(orders, course) {
let menu = new Map();
const makeMenu = (menuMap, targetMenu, menuNum, idx, curMenu) => {
if (curMenu.length === menuNum) {
let menuStr = curMenu.sort().join('');
menu.set(menuStr, (menu.get(menuStr) || 0) + 1);
}
for (let i = idx; i < targetMenu.length; i++) {
makeMenu(menuMap, targetMenu, menuNum, i + 1, [...curMenu, targetMenu[i]]);
}
};
orders.map((order) => {
course.map((courseNum) => makeMenu(menu, order, courseNum, 0, []));
});
menu = [...menu.entries()].filter((menuItem) => menuItem[1] > 1);
let ans = [];
course.map((courseNum) => {
let filteredMenu = menu.filter((menuItem) => menuItem[0].length === courseNum).sort((a, b) => b[1] - a[1]);
let maxCnt = filteredMenu.length ? filteredMenu[0][1] : 0;
filteredMenu.filter((menuItem) => menuItem[1] === maxCnt).map((menu) => ans.push(menu[0]));
});
return ans.sort();
}
✔アルゴリズム:実施✔メニューを組み合わせて確定し、メニューを含む人数を計算して問題を解く
✔メニュー組合せ関数
const makeMenu = (menuMap, targetMenu, menuNum, idx, curMenu) => {
if (curMenu.length === menuNum) {
let menuStr = curMenu.sort().join('');
menu.set(menuStr, (menu.get(menuStr) || 0) + 1);
}
for (let i = idx; i < targetMenu.length; i++) {
makeMenu(menuMap, targetMenu, menuNum, i + 1, [...curMenu, targetMenu[i]]);
}
};
✔入力条件により、すべての場合、ナビゲーションがタイムアウトしません.orders.map((order) => {
course.map((courseNum) => makeMenu(menu, order, courseNum, 0, []));
});
✔メニューセットは、少なくとも2名以上のお客様が注文した単品メニューセットのみ可能なので、Mapを並べてフィルタリングします.menu = [...menu.entries()].filter((menuItem) => menuItem[1] > 1);
✔coursenumを遍歴し、coursenumが組み合わせ長さの場合のみ、1回の濾過を行い、回数を降順に並べ替え、最大値の2回の濾過であるか確認することでansを入れるcourse.map((courseNum) => {
let filteredMenu = menu.filter((menuItem) => menuItem[0].length === courseNum).sort((a, b) => b[1] - a[1]);
let maxCnt = filteredMenu.length ? filteredMenu[0][1] : 0;
filteredMenu.filter((menuItem) => menuItem[1] === maxCnt).map((menu) => ans.push(menu[0]));
});
✔難易度:プログラマー標準LEVEL 2Reference
この問題について([プログラマー]メニュー更新-javascript), 我々は、より多くの情報をここで見つけました https://velog.io/@ywc8851/프로그래머스-메뉴-리뉴얼-javascriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol