본문 바로가기

알고리즘/problem solving

[프로그래머스] level2 스킬트리

문제링크 : 코딩테스트 연습 - 스킬트리 | 프로그래머스 (programmers.co.kr)

코딩테스트 연습 - 스킬트리 프로그래머스 (programmers.co.kr)

풀이 방법

스킬트리의 순서가 선행스킬 순서와 일치하면 풀리는 문제이다. 자료구조 스택을 활용하여 스킬트리의 스킬이 선행스킬 순서와 일치하면 answer를 더하여 반환하면된다고 생각했다.

 

나의 풀이

풀이 확인
def solution(skill, skill_trees):
    answer = 0
    
    for i in range(len(skill_trees)):
        k = 0
        stack = []
        for j in range(len(skill_trees[i])):
            if skill_trees[i][j] in skill:
                stack.append(skill_trees[i][j])
        while stack:
            if stack[0] == skill[k]:
                stack.pop(0)
            else:
                break
            k += 1
        if not stack:
            answer += 1
    
    return answer

while문을 한 번 더 안쓰고 for문 안에 조건을 하나 더 만들어주면 더 간단하게 해결할 수도 있었을 것 같다.

 

다른 사람 풀이

풀이 확인
def solution(skill, skill_trees):
    answer = 0

    for skills in skill_trees:
        skill_list = list(skill)

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

    return answer

파이썬 문법 중에 for-else문법이 있다는 것을 처음 알게 되었다. for-else 문법은 for문이 break 문으로 끊기지 않고 모두 수행되면 else 문이 수행되는 문법이다.