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

김멉덥·2023년 8월 30일
0

알고리즘 공부

목록 보기
88/171
post-thumbnail
post-custom-banner

문제

프로그래머스 Summer/Winter Coding(~2018)


코드 구현

def solution(skill, skill_trees):
    answer = 0

    for tree in skill_trees:
        can_learn = True
        skill_order = []    # 스킬트리 속 스킬의 순서를 저장할 배열

        for s in skill:
            if(tree.find(s) == -1):     # 대소 비교의 편의를 위해 99로 대입
                skill_order.append(99)
            else:
                skill_order.append(tree.find(s))    # 스킬트리 내의 해당 스킬 인덱스 값 넣기

        # 스킬의 순서 비교하기
        for i in range(0, len(skill_order)-1):
            if(skill_order[i] > skill_order[i+1]):  # 만약 스킬 순서가 틀린게 있다면 -> 해당 스킬트리는 불가능
                can_learn = False
                break

        if(can_learn):      # 모든 순서가 올바른 형태라면 -> 해당 스킬트리는 가능
            answer += 1

    return answer

풀이

  • 초반에 스킬트리의 스킬 인덱스를 찾았을 때 존재하지 않으면 -1이라서 대소 비교가 어려웠다. → 이에 따라 99로 대입하여 넣어주는 것으로 변경하였다.
  • 또한 대소 비교 과정에서 무식하게 if문을 여러개를 내세워 조건을 여러개 세우는 식으로 짰는데 너무 주먹구구식이라 테스트 절반을 다 틀렸다 !!! 간단하게 생각하면 되는 문제였는데 너무 복잡하게 접근해버린 것 같다.
  • 또한 skill에 있는 스킬을 전혀 배우지 않더라도, 올바른 스킬트리가 될 수 있는 경우도 놓쳤었다. 아예 선행 스킬들의 순서에 상관없는 다른 스킬들만 존재한다면 어쨋든 통과되므로 정답처리 해주어야 한다.
  • 해결에 참고한 테스트케이스와 반례들 : https://school.programmers.co.kr/questions/15036

profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

0개의 댓글