👨🏻‍💻알고리즘/프로그래머스

[프로그래머스] Lv2. 스킬트리

waveofmymind 2023. 1. 26. 14:51

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/49993

 

프로그래머스

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

programmers.co.kr

코드

from collections import deque
def solution(skill, skill_trees):
    cnt = 0
    for skill_tree in skill_trees:
        q = deque(skill)
        for i in skill_tree:
            if not q: #큐가 비었으면 스킬트리 O
                cnt += 1
                break
            if i == q[0]:
                q.popleft()
        else:
            for j in q:
                if j in skill_tree:
                    break
            else:
                cnt += 1
    return cnt

풀이

  • skill_trees는 길이가 최대 20이므로, 완전 탐색으로 풀었다.
  • 주의할 점은 큐가 비게되면 모든 스킬을 다 배운 것이기 때문에 스킬트리가 될 수 있지만, 큐가 남아도 스킬트리가 될 수있는 경우가 있다.
  • 케이스 4의 AECB의 경우 CB를 배우고 D를 안배워도 CB는 순서대로 스킬을 배웠으니 스킬 트리가 될 수 있다.
  • 그래서 skill_tree에 대한 for문을 다 돌고 else문에서 다시 큐의 모든 원소가 스킬트리에 있는지 없는지를 체크했다.