[JS][프로그래머스 -LEVEL 2 - 스킬트리]

정대만·2023년 7월 6일

코딩테스트

목록 보기
16/51
post-thumbnail

풀이

  • C -> B -> D 이런식으로 진행해야된다. 다른 노드는 신경쓰지 않는다..
  • C:1 B:2 D:3 으로 지정한다음
    C B A D F
    1 2 2 3
  • 앞에있는 노드가 자신보다 큰 경우에는 break 문으로 빠져나온다.

코드

function solution(skill, skill_trees) {
    var answer = skill_trees.length;
    var obj={};
     skill.split('').map((el,index)=>{
         obj[el]=index+1;
     })
  
    for(var i=0; i<skill_trees.length;
        i++){
        var ima= skill_trees[i].split('');
        ima.unshift(0);
     
        var copy__0=0;
        var hey=Array.from({length:ima.length},()=>0);
        for(var ii=1; ii<ima.length; ii++){
             
            if(skill.includes(ima[ii])){
              
                if(hey[ii-1]==obj[ima[ii]]-1){
                   hey[ii]=obj[ima[ii]];   
                    copy__0=obj[ima[ii]];
                    continue;
                }
                else{
                    answer-=1;
                    break;
                }
                
            }
            hey[ii]=copy__0;
            
        }
    }
    //console.log(answer)
    return answer;
}

내 코드는 너무 길고 별로다

다른 사람 코드

function solution(skill, skill_trees) {
    function isCorrect(n) {
        // const test = '[' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('').filter(v => !skill.includes(v)).join('') + ']*';
        let test = skill.split('');
        for (var i = 0; i < n.length; i++) {
            if (!skill.includes(n[i])) continue;
            if (n[i] === test.shift()) continue;
            return false;
        }
        return true;
    }    

    return skill_trees.filter(isCorrect).length;
}

정규식

new RegExp([^${skill}], 'g'); skill 은 변수로 해당하는 값을 'g' == global
전체 돌아가면서 해당하는 글자를 찾으라는 것이다.
"CBD"
["BACDE", "CBADF", "AECB", "BDA"]

["BCD" ,"CBD","CB","B"]

이런식으로 나온다.

profile
안녕하세요

0개의 댓글