본문 바로가기
Python3/프로그래머스

2022.05.09 [프로그래머스] (python 파이썬) 스킬트리

by ian's coding 2022. 5. 9.
728x90
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/49993?language=python3 

 

코딩테스트 연습 - 스킬트리

 

programmers.co.kr

 


풀이

이 문제는 유저가 만든 각 스킬트리(skill_trees)를 선행스킬순서(skill)대로 확인하며 각 스킬트리가 가능한지 확인했다.

 

우선 skill의 각 인덱스순서대로 값을 꺼내 tree에 들어있지않으면 ch_order을 False로 바꿔주었다. 이유는 선행스킬을 찍지않았지만 이후 스킬을 찍는 것을 판단하기 위함이다.

 

skill의 각 인덱스순서대로 값을 꺼내 tree에 들어있는지 확인하고 들어있으면 해당 값이 있는 인덱스 위치를 num변수에 저장했다. 만약 tree.index(i)의 값이 num보다 크거나 ch_order이 False이면 num을 -1로 저장후 break문을 통해 tree에 대한 검사를 멈추어주었다.

여기서 멈추는 조건에 num>tree.index(i)을 사용한 이유는 num이 tree.index(i)보다 크면 선행스킬을 나중에 찍은것이기 때문이다.

그리고 not ch_order조건을 준 이유는 선행스킬을 찍지않고 다음 스킬을 찍었기 때문이다.

 

tree에 대한 검사 이후, num값이 -1이 아니면 answer값을 증가시켰다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def solution(skill, skill_trees):
    answer = 0
    
    for tree in skill_trees:
        num=0
        ch_order=True
        for i in skill:
            if i in tree:
                if num>tree.index(i) or not ch_order:
                    num=-1
                    break
                else:
                    num = tree.index(i)
            else:
                ch_order=False
        if num!=-1:
            answer+=1
            
    return answer
cs

 

 

 

 

728x90
반응형

댓글