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

박현우·2021년 1월 20일
0

프로그래머스

목록 보기
15/34

문제

스킬트리

문제 해설

스킬 트리가 주어지고 스킬 트리를 반드시 끝까지 배울 필요는 없지만, 선행 스킬을 배우지 않으면 안되기 때문에 순서가 중요하다. 문자열 메소드 중 find()를 사용해서 index를 스택에 쌓아놓고, 그것이 오름차순이면 정답, 아니면 배울 수 없는 스킬트리이다. 정상적인 스킬트리라도 아직 안배운 스킬이 있을 수 있어 스택 top에 -1이 쌓일 수 있는데 그 부분만 핸들링 해주면 된다.
find()메소드는 문자열에 쓸 수 있는 함수인데, 찾고 싶은 문자열이 존재하면 index를 반환해 주고 없으면 -1을 반환해준다.

소스 코드

def solution(skill, skill_trees):
    answer = 0
    answer = len(skill_trees)
    for target in skill_trees:
        s = []
        for i in range(len(skill)):
            # 스킬의 순서를 s에 저장
            s.append(target.find(skill[i]))
        # 스킬 순서는 맞지만 다 안배운 경우
        while s:
            last = s.pop()
            if last != -1:
                s.append(last)
                break
        top = 0
        for x in s:
            # 스킬트리에서 벗어남
            if x < top:
                answer -= 1
                break
            top = x
    return answer

0개의 댓글