Practice for coding test
프로그래머스 - Level 2. 스킬트리 / JavaScript (js)
Gray Park
2023. 3. 1. 11:30
728x90
반응형

문제설명

문제분석 - 수도코드
이 문제는 skill_trees를 순회하며 skill의 조건에 부합하는 요소를 필터링한 길이를 찾는 문제입니다. 따라서 solution 함수는 다음과 같이 간단하게 작성할 수 있습니다.
function solution(skill, skill_trees) {
return skill_trees.filter(x => isPossible(skill, x)).length;
}
이제 isPossible 함수를 통해 skill_trees의 요소와 skill을 비교해 가능한 스킬트리인지 아닌지 리턴하면 됩니다.
이해하기 쉽게 코드작성하기
function solution(skill, skill_trees) {
return skill_trees.filter(x => isPossible(skill, x)).length;
}
function isPossible(a, b) {
let isUsed = new Array(a.length).fill(false);
for(let i = 0; i < b.length; i++) {
const idx = a.indexOf(b[i]);
const falseIdx = isUsed.indexOf(false);
if(a[idx] === b[i] && idx !== falseIdx) return false;
isUsed[idx] = true;
}
return true;
}
위 코드에서 isUsed 배열을 생성하고, skill_trees의 요소(b)를 순회하며 a에 포함되었는지 여부를 확인합니다. 만약 찾는 문자가 a에 포함되지 않는다면 idx가 항상 -1을 리턴하므로 isUsed[idx] 는 undefined 여서 아무런 동작도 하지 않으므로 무시됩니다. b[i]가 a[idx]와 같은데, idx와 falseIdx(스킬트리에서 적용될 차례인 스킬)이 다른 경우에는 불가능한 경우로 판단합니다. 이 반복문을 통과하면 항상 가능한 경우이므로 true를 리턴하면 필터함수의 완성입니다.
728x90
반응형