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

nnm·2020년 4월 29일
0
post-custom-banner

프로그래머스 스킬트리

문제풀이

단순하게 각 스킬트리의 순서를 하나씩 따지는 방식으로 풀이를 하고나서 다른 사람의 풀이를 보았는데 정규표현식으로 아주 깔끔하게 끝내버리는 것을 보고 충격받았다. 그래서 정규표현식을 이용해 푼 방식으로 다시 풀어보았다.

순서는 다음과 같다.

  1. 정규표현식을 이용해서 각 스킬트리에 존재하는 skill에 포함되지 않은 문자열을 모두 제거한다.

    skill_trees.map(x => x.replace(new RegExp(`[^${skill}]`, 'g'), ''))
    • 여기서 new RegExp는 정규표현식을 생성자로 생성하는 것이다.
    • [^str]은 부정문자 셋으로 인덱스와 상관없이 str에 포함되지 않은 문자에 대응된다.
    • 'g'는 두 번째 인자로 전역검색을 의미한다.
    • MDN 자바스크립트 정규 표현식
  2. 올바른 스킬트리(skill)와 관련없는 스킬이 모두 제거된 스킬 트리들은 빈 문자열이거나 skill에 속한 문자만으로 이루어진 문자열이다.

    • ["BACDE", "CBADF", "AECB", "BDA"]일 때 ["BCD", "CBD", "CB", "BD"]가 된다.
    • 따라서 올바른 스킬트리라면 skill.indexOf()를 사용했을 때 0이 리턴된다. 또는 빈 문자열이다.
  3. 모든 과정을 거친 후 길이를 구한다.

구현코드

function solution(skill, skill_trees) {
    return skill_trees
        .map(x => x.replace(new RegExp(`[^${skill}]`, 'g'), ''))
        .filter(x => skill.indexOf(x) === 0 || x === '')
        .length;
}
profile
그냥 개발자
post-custom-banner

0개의 댓글