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
반응형