본문 바로가기
알고리즘 문제/프로그래머스_Lv2 도장깨기

[프로그래머스] 스킬트리 (Python)

by 스코필 2024. 6. 8.

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/49993

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

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

선행 스킬 순서가 없는 다른 스킬들은 순서에 상관없이 배울 수 있다.

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

제한 조건

  • 스킬은 알파벳 대문자로 표기하며, 모든 문자열은 알파벳 대문자로만 이루어져 있습니다.
  • 스킬 순서와 스킬트리는 문자열로 표기합니다.
    • 예를 들어, C → B → D 라면 "CBD"로 표기합니다.
  • 선행 스킬 순서 skill의 길이는 1 이상 26 이하이며, 스킬은 중복해 주어지지 않습니다.
  • skill_trees는 길이 1 이상 20 이하인 배열입니다.
  • skill_trees의 원소는 스킬을 나타내는 문자열입니다.
    • skill_trees의 원소는 길이가 2 이상 26 이하인 문자열이며, 스킬이 중복해 주어지지 않습니다.

 

풀이

스킬트리에서 선행 스킬이 나온다면, 무조건 skill의 선행 스킬 순서대로 배워야 하므로,

스택을 활용해서 함수를 작성

 

✅ Code - 성공

def solution(skill, skill_trees):
    answer = 0
    
    for skill_tree in skill_trees:
        stack = list(skill)
        flag = True
        for s in skill_tree:
            if s in stack and s != stack.pop(0):
                flag = False
                break
        
        if flag:
            answer += 1
    
    return answer