❓  문제

Summer/Winter Coding(~2018) - 스킬트리

 

 

🛎️  아이디어

1. skill_trees 배열에서 하나씩 꺼내온다.

2. 해당 배열에서 find를 사용하여 skill의 각각의 원소에 해당하는 인덱스를 가져온다.

3. 만약 find의 리턴 값이 -1이라면 (해당 배열에 값이 없는 경우) skills의 길이를 넣어준다.
    a. -1이 앞에 있는 경우 미통과이기 때문에 순서를 뒤바꿀 수 있는 큰 값을 넣어주는 것이다.

4. 정렬했을 때 순서가 바뀌지 않는다면 통과!

 

💻  풀이

def solution(skill, skill_trees):
    answer = 0

    for skills in skill_trees:
        token_index_list = list(map(lambda x: skills.find(x), skill))
        token_index_list = list(map(lambda x: len(skills) if x == -1 else x, token_index_list))
        if token_index_list == sorted(token_index_list):
            answer += 1

    return answer

    print(solution("CBD", ["BACDE", "CBADF", "AECB", "BDA"]))

"""
token_index_list 결과가 다음과 같으면,

[2, 0, 3] -> 미통과
[0, 1, 3] -> 통과
[2, 3, -1] -> 통과
[-1, 0, 1] -> 미통과

-1이 있는 두 가지를 구별할 방법은 -1인 경우 큰 값을 넣어주기!
"""

+ Recent posts