function solution(skill, skill_trees) {
var answer = 0;
skill_trees.forEach((skill_tree) => {
const can = new Set();
can.add(skill[0]);
answer += 1;
for (let s = 0; s < skill_tree.length; s++) {
if (skill.includes(skill_tree[s])) {
if (!can.has(skill_tree[s])) {
answer -= 1;
break;
} else {
if (skill.indexOf(skill_tree[s] < skill.length -1)) {
can.add(skill[skill.indexOf(skill_tree[s]) + 1]);
}
};
};
};
});
return answer;
}
통과는 되었지만 불필요한 연산이 너무 많다고 생각됩니다. 그래서 다른사람의 코드를 살펴봤습니다.
function solution(skill, skill_trees) {
function isCorrect(n) {
let test = skill.split('');
for (var i = 0; i < n.length; i++) {
if (!skill.includes(n[i])) continue;
if (n[i] === test.shift()) continue;
return false;
}
return true;
}
return skill_trees.filter(isCorrect).length;
}
문제 해결 아이디어입니다.
filter에서 true와 false를 통해 갯수를 구하는 것, 콜백함수를 정의해주어서 filter를 사용하는 것을 배웠습니다.