import java.util.*;
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0; // 가능한 스킬트리의 개수를 저장할 변수
for (String skillTree : skill_trees) { // 스킬트리 배열을 순회
boolean isValid = true; // 현재 스킬트리가 유효한지 여부를 저장할 변수
int lastSkillIndex = -1; // 마지막으로 발견된 선행 스킬의 인덱스
for (int i = 0; i < skillTree.length(); i++) { // 현재 스킬트리의 각 스킬을 순회
int index = skill.indexOf(skillTree.charAt(i)); // 현재 스킬이 선행 스킬 순서에서의 위치
// 선행 스킬 순서에 존재하지 않는 스킬인 경우, 무시하고 계속 진행
if (index == -1) continue;
// 선행 스킬 순서에 따라 현재 스킬을 배울 수 없는 경우
if (index > lastSkillIndex + 1) {
isValid = false; // 유효하지 않은 스킬트리로 판별
break; // 더 이상 검사할 필요가 없으므로 반복문 탈출
}
lastSkillIndex = index; // 마지막으로 발견된 선행 스킬의 인덱스를 갱신
}
if (isValid) { // 모든 검사를 마친 후 현재 스킬트리가 유효하다면
answer++; // 가능한 스킬트리의 개수를 증가
}
}
return answer; // 가능한 스킬트리의 총 개수를 반환
}
public static void main(String[] args) {
Solution sol = new Solution();
String skill = "CBD";
String[] skill_trees = {"BACDE", "CBADF", "AECB", "BDA"};
int result = sol.solution(skill, skill_trees);
System.out.println(result); // 결과 출력, 예상 값: 2
}
}