[프로그래머스 level2] 스킬트리
문제
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를 리턴하면 된다.
이런식으로 정규식을 사용하다니... 신박하다!
Author And Source
이 문제에 관하여([프로그래머스 level2] 스킬트리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rladpwl0512/프로그래머스-level2-스킬트리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)