선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.
예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더
일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.
위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더
와 같은 스킬트리는 가능하지만, 썬더 → 스파크
나 라이트닝 볼트 → 스파크 → 힐링 → 썬더
와 같은 스킬트리는 불가능합니다.
선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.
제한 조건
입출력 예
skill | skill_trees | return |
---|---|---|
"CBD" | ["BACDE", "CBADF", "AECB", "BDA"] | 2 |
입출력 예 설명
def solution(skill, skill_trees):
count = 0
for skill_tree in skill_trees:
s = "" # 하나의 스킬트리를 뽑을 때마다 s 초기화
for ch in skill_tree:
if ch in skill: # 스킬트리 중에 skill이 있다면 s에 추가
s += ch
if skill[:len(s)] == s: # 만든 s를 기준으로 skill과 같다면 count += 1
count += 1
return count
#test case
print(solution("CBD", ["BACDE", "CBADF", "AECB", "BDA"])) # 2
print(solution("ABC", ["DEF"])) # 1
print(solution("CBD", ["CAD"])) # 0
print(solution("CBD", ["AEF", "ZJW"])) # 2
print(solution("REA", ["REA", "POA"])) # 1
print(solution("CBDK", ["CB", "CXYB", "BD", "AECD", "ABC", "AEX", "CDB", "CBKD", "IJCB", "LMDK"])) # 4
print(solution("BDC", ["AAAABACA"])) # 0
print(solution("CBD", ["C", "D", "CB", "BDA"])) # 2
def solution(skill, skill_trees):
count = 0
for skill_tree in skill_trees:
s = "" # 하나의 스킬트리를 뽑을 때마다 s, index 초기화
index = 0
for ch in skill_tree:
if ch in skill: # 스킬트리에 skill이 있다면 s에 추가
s += ch
if s[index] != skill[index]: # 인덱스 값이 다르다면 s를 -1 변경 후 break
s = "-1"
break
index += 1 # s[index]==skill[index] 면 index값 +1
if s != "-1": # s가 -1이 아니라면(=제대로 된 스킬트리라면) count += 1
count += 1
return count