Algorithm

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

createElement 2022. 9. 16. 22:18
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이전에 푼 문제를 다시 풀었는데 더 간단한 방법으로 해결하여 이 글을 작성한다.

 

이번에 작성한 코드

이전 코드보다 가독성이 더 좋아졌고 더 간단하게 풀이해보았다.

function solution(skill, skill_trees) {
  let cnt = 0;
  for (let list of skill_trees) {
    // skill에 포함된 스킬만 뽑기
    let s = list.split("").filter((v) => skill.indexOf(v) > -1).join("");
    // 항상 첫 번째 스킬부터 배운 후 두 번째 스킬을 배워야 하므로
    // 필터링된 스킬 트리(s)는 skill의 맨 앞 부분부터 일치해야 한다.
    // 예를 들어 skill은 'CBD'일 때 스킬 트리가 'BDA'의 경우,
    // 필터링된 스킬 트리는 'BD'이며 skill에 포함된 스킬 트리이지만
    // B 스킬을 배우기 전에 C 스킬부터 배워야 하므로 올바르지 않은 스킬 순서이다.
    if (skill.indexOf(s) === 0) cnt++;
  }
  return cnt;
}

console.log(solution("CBD", ["BACDE", "CBADF", "AECB", "BDA"])); // 2

 

이전에 작성한 코드

function solution(skill, skill_trees) {
    let answer = 0;
    for(let i of skill_trees) {
        let tmp = skill.split('');
        let len = 0;
        for(let j of i) {
            if(tmp.includes(j)) {
                if(j !== tmp.shift()) break;
                else len++;
            }
            else len++;
        }
        if(len === i.length) answer++;
    }
    return answer;
}