[프로그래머스 level2] 스킬트리

김예지·2021년 10월 24일
0

문제

https://programmers.co.kr/learn/courses/30/lessons/49993


문제 풀이

코드1(내 풀이)

function solution(skill, skill_trees) {
    let answer=0;
    for(let curriculum of skill_trees){
        let tmp=skill;
        let ch=true;
        for(let x of curriculum){
            if(tmp.includes(x) && tmp.indexOf(x)!==0){
                ch=false;
                break;
            }
            else if(tmp.includes(x) && tmp.indexOf(x)===0){
                tmp=tmp.replace(x, '');
            }
        }
        if(ch) answer++;
    }
    return answer;
}

이전에 비슷한 문제를 풀어서 그런지, 빨리 풀린 문제이다. ch배열을 사용해서 가능한 스킬트리인지 확인 후 answer++를 해주면 된다.

코드2(다른 풀이)

function solution(skill, skill_trees) {
    var answer = 0;
    var regex = new RegExp(`[^${skill}]`, 'g');

    return skill_trees
        .map((x) => x.replace(regex, ''))
        .filter((x) => {
            return skill.indexOf(x) === 0 || x === "";
        })
        .length
}

다른분이 정규표현식으로 작성한 코드가 신박해서, 가져와봤다.
new RegExp를 사용해서 새로운 정규식을 만든다. 여기서 [^${skill}]은, ${skill}이 아닌 것을 가져온다. 즉, x.replace(regex, '')은 x문자열에서 skill('cbd')에 해당하지 않는 문자를 삭제한다.
아래 원리를 사용해서 filtering 후 length를 리턴하면 된다.
이런식으로 정규식을 사용하다니... 신박하다!

profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

0개의 댓글