[programmers-python] 스킬트리

배채윤·2020년 11월 29일
0
post-custom-banner

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

나의 풀이

일단 answer에 skill_trees의 개수를 선언한 후, 불가능한 스킬트리를 발견할 때마다 -1씩 해주었다.
불가능한 스킬트리를 만났을 경우, 해당 스킬트리에 대한 for문을 완전히 break 해주기 위해 avail이라는 bool 형을 통해 체크했다.

def solution(skill, skill_trees):
    answer = len(skill_trees)
    for skill_tree in skill_trees:
        avail = True
        for index, s in enumerate(skill_tree):
            if s in skill:
                for prev in skill.split(s)[0]:
                    if not prev in skill_tree[:index]:
                        answer -= 1
                        avail = False
                        break
            if not avail:
                break
    return answer

모범 풀이

for문에도 else 문이 가능한 것을 알게해준 코드다. for 문에 else를 달면 해당 for문이 break 되지 않고 정상종료됐을 때 else 문이 실행된다.

pop을 이용해서 아주 깔끔하게 푸셨다.
s가 skill 안에 존재한다면 항상 skill 문자열 중 첫 번째 문자와 일치해야 한다는 점을 이용한 풀이다.

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
profile
새로운 기술을 테스트하고 적용해보는 걸 좋아하는 서버 개발자
post-custom-banner

0개의 댓글