스킬트리
Level
Recruitment
// 테케 2,5,14 통과
function solution(skill, skill_trees) {
  var answer = 0;
  let skillSet = skill.split("");
  let currentCheck = 0;

  skill_trees.forEach((skill_tree) => {
    let isPossible = true;
    for (let c of skill_tree) {
      for (let i = currentCheck + 1; i < skillSet.length; i++) {
        if (skillSet[i] === c) {
          isPossible = false;
          currentCheck++;
        }
        break;
      }
      if (!isPossible) return;
    }
    answer++;
  });

  return answer;
}

// 통과 +6
// 시간복잡도 : O(s+st*item.length*(s-currentCheck))
function solution(skill, skill_trees) {
  var answer = 0;
  let skillSet = skill.split("");

  skill_trees.forEach((skill_tree) => {
    let isPossible = true;
    let currentChar = 0;

    for (let c of skill_tree) {
      if (c === skillSet[currentChar]) {
        // 스킬셋과 단어 위치가 같으면, 다음 단어를 체크.
        currentChar++;
        continue;
      }
      for (let i = currentChar + 1; i < skillSet.length; i++) {
        // 단어가 다를 경우에는, skillset을 돌며 같은 단어가 있는지 확인
        if (skillSet[i] === c) {
          isPossible = false;
          break;
          // 있을 경우, 선행 스킬을 배우지 않았으므로 answer값 증가 없이 forEach문 다음 item 순회
        }
      }
      // 만약 skillset에 포함된 단어가 모두 포함되지 않을 경우, skill_tree의 다음 문자를 skillset과 비교

      if (!isPossible) return;
    }
    answer++;
  });

  return answer;
}