말랑한 하루
[Programmers] 메뉴 리뉴얼 (Lv 2, JavaScript) 본문
반응형
[ 개요 ]
풀이시간 : 115분
[ 학습 내용 ]
- includes() : 문자열 포함확인. java의 contains를 자꾸 쓰려고한다. 고쳐나갈 것
- Object.keys(object) : key-value로 구성된 Object의 key를 배열로 반환한다.
- Object.values(object) : key-value로 구성된 Object의 value를 배열로 반환한다.
- Object.entries(object) : object의 key, value쌍 배열을 반환한다. 다음 예제로 활용할 수 있다.
- reduce(arr, cur) : 누산기 acc를 지니고 현재값 cur을 순회하여 acc를 반환하는 함수. 활용도가 무궁무진하니 익숙해지기
[ 소스 코드 ]
function solution(orders, course) {
var answer = [];
var menus = [], menu = [], order = [], check = [], len = 0;
const getUnion = (idx, cnt) => {
if (cnt === len) {
let cook = menu.join("");
menus[cook] = menus[cook] === undefined ? 1 : menus[cook] + 1;
return;
}
for(var i=idx; i<order.length; i++) {
if (!check[i]) {
check[i] = true;
menu[cnt] = order[i];
getUnion(i+1, cnt+1);
check[i] = false;
}
}
}
orders.forEach((orders) => {
order = orders.split("").sort().join("");
course.forEach((course) => {
len = course;
menu = [];
check = new Array(order.length).fill(false);
if (order.length >= course) getUnion(0, 0);
})
})
var candi = [];
course.forEach((course) => {
candi[course] = [];
let cooks = Object.keys(menus).filter(menu => menu.length == course);
let max_order = 2;
cooks.forEach((cook) => {
if (max_order < menus[cook]) {
max_order = menus[cook];
candi[course] = [cook];
} else if (max_order === menus[cook]) {
candi[course].push(cook);
}
})
})
answer = candi.reduce((acc, cur) => [...acc, ...cur]);
return answer.sort();
}
[ 심화 코드 ]
const selected = Object.entries(obj)
.filter(([key, value]) => {
if (value === max) return true;
})
.reduce((obj, key) => {
return [...obj, key];
})
.map(([key, _]) => {
return key;
});
[ 코드 분석 ]
Object와 Array간 이해가 충돌하여, filter가 기본적으로 Array에 적용되어 Object에 직접 filter를 사용하는 행위를 할 수 없었음. Object.entries()를 통해 Object를 key-value값으로 반환받았을 때, 비로소 filter-reduce-map 등을 적용할 수 있었다.
빈 배열에 ["code"]와 같이 문자열로 key-value쌍을 만들어 대입할 시 해당 배열은 Object로 변환하여 entires()와 key-value를 활용하여 문제를 풀어나가야 함을 알았음.
반응형
'문제풀이 > Programmers' 카테고리의 다른 글
[Programmers] 거리두기 확인하기 (Lv 2, JavaScript) (0) | 2022.07.13 |
---|---|
[Programmers] 괄호 변환 (Lv 2, JavaScript) (0) | 2022.07.13 |
[Programmers] 오픈채팅방 (Lv 2, JavaScript) (0) | 2022.07.08 |
[Programmers] 문자열 압축 (Lv 2, JavaScript) (0) | 2022.07.08 |
[Programmers] 비밀지도 (Lv 1, JavaScript) (0) | 2022.07.06 |
Comments