https://programmers.co.kr/learn/courses/30/lessons/49993
function solution(skill, skill_trees) {
let answer = 0;
const skillOrder = skill.split('').reduce((acc, curr, index) => {
acc[curr] = index;
return acc;
}, {});
const skillTreeMax = new Array(skill_trees.length).fill(-1);
for (let i=0 ; i < skill_trees.length ; i++) {
const skillTree = skill_trees[i];
let able = true;
for (const skill of skillTree) {
if (skillOrder[skill] !== undefined) {
if (skillOrder[skill] !== skillTreeMax[i]+1) {
able = false;
break;
}
skillTreeMax[i] = skillOrder[skill]
}
}
if (able) {
answer++;
}
}
return answer;
}
문제를 봤을 때 skill
변수에 주어져 있는 skill들에 레벨(?)을 줘서 확인을 하는 것이 좋겠다는 생각을 했고 index 값을 활용했다. 이후에 skill_trees
를 확인하면서 현재 기술이 사용 가능한 것인지를 확인했다.
그런데 문제를 잘 못 읽어서 순서만 맞으면 중간 스킬 단계를 빼먹어도 된다고 생각했다. 이후에 4번 예시로 확인을 하고 대소비교를 하던 코드를 다음과 같이 바꿨다.
if (skillOrder[skill] !== skillTreeMax[i]+1) {
able = false;
break;
}