알고리즘 - 스킬트리

HoJeong Im·2021년 10월 5일
0

Break_Algo

목록 보기
35/46

문제

코드

function solution(skill, skill_trees) {
    var answer = 0;
    
    // skill들의 유무를 파악하기 위한 객체
    let obj = {};
    
    let arr1 = skill.split("").map((e,idx)=> {
        obj[e] = idx+1;
        return idx+1;
    });
    
    // 각 원소까지의 합을 가짐 
    let arr2 = [];
    
    // 모두 방문했는지 확인하기 위한 배열 
    let arr3 = [];
    
    arr1.forEach((e,idx)=>{
        if(idx===0){
            arr2.push(e);
        }
        else {
            arr2.push(e+arr2[idx-1]);
        }
        arr3.push(false);
    });
    
    // arr3 배열 복사 
    let origin = arr3.slice();

    //console.log(arr1,arr2,arr3,origin)
    //console.log(obj)
    skill_trees.forEach((skill_tree)=>{
        
        let target = 0;
        let check = false; 
        // 각 스킬 트리를 순회
        let test = skill_tree.split("");
        console.log('-----------', arr3)
        // 하나씩 돌면서
        for(let k = 0 ; k < test.length ; k++){
            
            // 각 character
            let e = test[k];
            
            // 해당 원소가 skill에 없다면 skip
            if(!obj[e]) {
                target++;
                continue;
            }
        
            // 이전 상태가 true인지 확인 
            // 모두 true여야 함
            let isRight = true;
            arr3[obj[e]-1] = true;
            for(let i = 0 ; i < obj[e]; i++){
                if(!arr3[i]){
                    isRight = false;
                }
            }
            check = isRight;
            console.log(arr3,isRight, e)
            if(!check){
                break;
            }
            
        }
    
        // 초기화
        for(let i = 0; i < origin.length ; i++){
            arr3[i] = origin[i];
        }
        
        
        if(check){
            answer++;
        }
        
        if(target === skill_tree.length){
            answer++;
        }
        
    });
    
    
    return answer;
}

회고

  • 꼼꼼히 문제를 보고 작성해야 함

  • 와... 스킬 트리에 없다는 것은 생각하지 못했던 부분

  • 코드 작성 스타일을 가독성이 좋게 바꾸는 연습을 다시 해야할 듯

    • 내가 쓰고도 다시 보기가 싫어지네 ㅠ
profile
꾸준함이 제일 빠른 길이었다

0개의 댓글