function solution(info, query) {
var answer = [];
let count = 0;
let number = 0;
let infoObj = [];
let queryObj = [];
info.forEach(element => {
const [lang, job, grade, food, score] = element.split(' ');
infoObj.push({ lang, job, grade, food, score });
});
query.forEach(element => {
const [lang, job, grade, foodScore] = element.split(' and ');
const [food, score] = foodScore.split(' ');
queryObj.push({ lang, job, grade, food, score });
});
for(let i=0 ; i< queryObj.length ; i++)
{
for(let j=0 ; j< infoObj.length ; j++)
{
if (parseInt(infoObj[j].score) >= parseInt(queryObj[i].score))
{
if(queryObj[i].lang == '-' )
{
count += 1;
}
if (queryObj[i].job == '-' )
{
count += 1;
}
if ( queryObj[i].grade == '-')
{
count += 1;
}
if ( queryObj[i].food == '-')
{
count += 1;
}
if (infoObj[j].lang == queryObj[i].lang)
{
count += 1;
}
if (infoObj[j].job == queryObj[i].job)
{
count += 1;
}
if (infoObj[j].grade == queryObj[i].grade)
{
count += 1;
}
if (infoObj[j].food == queryObj[i].food)
{
count += 1;
}
if (count > 3){
number += 1 ;
count = 0;
}
}
count = 0;
}
answer.push(number);
number = 0;
}
return answer;
}
===================================================================
function solution(info, query) {
var answer = [];
let count = 0;
let number = 0;
let infoMap = new Map();
let queryObj = [];
info.forEach(element => {
const [lang, job, grade, food, score] = element.split(' ');
if(!infoMap.has(lang)) infoMap.set(lang, new Map());
if(!infoMap.get(lang).has(job)) infoMap.get(lang).set(job, new Map());
if(!infoMap.get(lang).get(job).has(grade)) infoMap.get(lang).get(job).set(grade, new Map());
if(!infoMap.get(lang).get(job).get(grade).has(food)) infoMap.get(lang).get(job).get(grade).set(food, []);
infoMap.get(lang).get(job).get(grade).get(food).push(parseInt(score));
});
query.forEach(element => {
const [lang, job, grade, foodScore] = element.split(' and ');
const [food, score] = foodScore.split(' ');
queryObj.push({ lang, job, grade, food, score });
});
for(let i=0 ; i< queryObj.length ; i++)
{
for(let lang of infoMap.keys()){
if (lang !== queryObj[i].lang && queryObj[i].lang !== '-') continue;
for(let job of infoMap.get(lang).keys()){
if (job !== queryObj[i].job && queryObj[i].job !== '-') continue;
for(let grade of infoMap.get(lang).get(job).keys()){
if (grade !== queryObj[i].grade && queryObj[i].grade !== '-') continue;
for(let food of infoMap.get(lang).get(job).get(grade).keys()){
if(food !== queryObj[i].food && queryObj[i].food !== '-') continue;
const scores = infoMap.get(lang).get(job).get(grade).get(food);
if(!scores) continue;
number += scores.filter(score => score >= parseInt(queryObj[i].score)).length;
}
}
}
}
answer.push(number);
number = 0;
}
return answer;
}