스킬 트리가 주어지고 스킬 트리를 반드시 끝까지 배울 필요는 없지만, 선행 스킬을 배우지 않으면 안되기 때문에 순서가 중요하다. 문자열 메소드 중 find()를 사용해서 index를 스택에 쌓아놓고, 그것이 오름차순이면 정답, 아니면 배울 수 없는 스킬트리이다. 정상적인 스킬트리라도 아직 안배운 스킬이 있을 수 있어 스택 top에 -1이 쌓일 수 있는데 그 부분만 핸들링 해주면 된다.
find()메소드는 문자열에 쓸 수 있는 함수인데, 찾고 싶은 문자열이 존재하면 index를 반환해 주고 없으면 -1을 반환해준다.
def solution(skill, skill_trees):
answer = 0
answer = len(skill_trees)
for target in skill_trees:
s = []
for i in range(len(skill)):
# 스킬의 순서를 s에 저장
s.append(target.find(skill[i]))
# 스킬 순서는 맞지만 다 안배운 경우
while s:
last = s.pop()
if last != -1:
s.append(last)
break
top = 0
for x in s:
# 스킬트리에서 벗어남
if x < top:
answer -= 1
break
top = x
return answer