선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.
예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더
일때, 썬더
를 배우려면 먼저 라이트닝 볼트
를 배워야 하고, 라이트닝 볼트
를 배우려면 먼저 스파크
를 배워야 합니다.
위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더
와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더
와 같은 스킬트리는 불가능합니다.
선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.
skill skill_trees return
"CBD" ["BACDE", "CBADF", "AECB", "BDA"] 2
입출력 예 설명
skill_trees를 순회하며 해당 스킬이 skill에서 가리키는 위치의 스킬과 동일한 경우, 해당 스킬이 skill에 없는 경우, 해당 스킬이 skill에 있지만 skill에서 가리키는 위치의 스킬과 다른 경우 이렇게 3가지로 나누어서 마지막 경우에 chk를 False로 변환하여 카운팅하지 않도록 구현하였다.
def solution(skill, skill_trees):
answer = 0
for i in range(len(skill_trees)):
level=0
idx=0
chk=True
while idx<len(skill_trees[i]) and level<len(skill):
if skill_trees[i][idx]==skill[level]:
level+=1
idx+=1
elif skill_trees[i][idx] not in skill:
idx+=1
else:
chk=False
break
if chk==True:
answer+=1
return answer