📖 Summer/Winter Coding(~2018) > 스킬트리

📖What I thought

<1차 생각>

  1. filter해서 skill만 남기기
  2. 순서가 skill이랑 동일하면 ok

<2차 생각> 생각해보니 스킬 순서여야한다고 늘 다 쓰이는 게 아님 즉 스킬이 cbd순이라면 cb도 되고 cd 됨

그럼??? 1차 생각의 1번에서 정리된 스킬트리에 없는 걸 스킬도 필터를 걸어서 거르기 → 필터된 거 2개 비교해서 동일하면 ok

<3차 생각> 테스트 해보니 순서만 중요한 게 아니라 선행 스킬이 중요한 거였음… 즉, cb도 되고 cbd도 되지만 c 건너뛰고 bd는 안 됨

<4차 생각> 생각 조금 더 깊게 해보니 이렇게 복잡하게 쓸 필요 없이 필터된 스킬 트리 길이만큼 스킬을 split해 그러고 얘네가 동일하면 ok

📖풀이

📎구현

def solution(skill, skill_trees):
    cnt = 0
    
    skill = list(skill)
    for skill_tree in skill_trees:
        filtered_tree = list(filter(lambda x: x in skill, skill_tree))
 
        if skill[:len(filtered_tree)] == filtered_tree:
            cnt += 1
    
    return cnt

📖What I learned

  1. 필터 함수와 람다식을 자유자재로 사용할 수 있도록 공부하자!

📖관련 지식

📎filter

📎lambda