🪴 Hayul's digital garden

Search

Search IconIcon to open search

스킬트리

Last updated Nov 18, 2022 Edit Source

선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.

예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.

위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다.

선행 스킬 순서 skill과 유저들이 만든 스킬트리를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.

# 제한 조건

# 입출력 예

skillskill_treesreturn
"CBD"["BACDE", "CBADF", "AECB", "BDA"]2

# 입출력 예 설명

# 나의 풀이

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from collections import deque

def solution(skill, skill_trees):
    answer = 0

    for skills in skill_trees:
        skill_list = deque(list(skill))

        for s in skills:
            if s in skill:
                if s != skill_list.popleft():
                    break
        else:
            answer += 1

    return answer
  1. 먼저 각 스킬트리를 deque에 태운다. 이 deque는 왼쪽부터 제거될 예정.
  2. 그래서 만약 한 스킬트리의 한 글자가 skill에 포함되어 있다면,
    1. deque에서 가장 왼쪽의 글자를 빼고 둘을 비교한다.
    2. 둘이 같다면 계속하고, 다르다면 중지한다.
    3. 이때, deque의 길이는 하나 줄어들게 된다.
  3. 계속 비교해서 내려가고, 조건을 충족시키면 answer에 계속 더해 return 하면 끝.