알고리즘/프로그래머스

프로그래머스 - 스킬트리 (JavaScript)

시나모온 2020. 5. 7. 17:42

문제 링크입니다 : https://programmers.co.kr/learn/courses/30/lessons/49993?language=javascript

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

쉽게 생각하면 skill_trees의 각 문자열의 글자별로 탐색하면서, 매번 skill을 탐색하면 될 것 같습니다. 하지만 이렇게 하면 문자열 1개당 시간복잡도가 O(N^2)이 되서 전체 O(N^3)이 됩니다.

 

특정 영역에 데이터가 있는지 없는지 판단하고 싶을 때는 Map이나 Set을 사용하는게 시간을 O(lgN)으로 줄일 수 있습니다. 하지만 비교하면서 순서도 신경써야하기 때문에 Map을 사용해서 index값을 넣어서 순서도 같이 저장했습니다.

 

 

 

 

 

function solution(skill, skill_trees) {
    var answer = 0;
    
    const m = new Map();
    for(let i = 0; i < skill.length; i++) {
        m.set(skill[i], i);
    }
    
    
    skill_trees.forEach(function(el) {
        let index = 0;
        let flag = false;
        for(let i = 0; i < el.length; i++) {
            if(m.has(el[i])) {
                if(m.get(el[i]) !== index++) {
                    flag = true;
                    break;
                }
                
            }
        }
        if(!flag) answer++;
    });
    
    
    return answer;
}

 

 

 

개발 환경 : vscode

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~