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

def solution(skill, skill_trees):
    answer = 0

    for skill_tree in skill_trees:
        buf = []
        for each_skill in skill_tree:
            if each_skill in skill:
                buf.append(each_skill)
        if buf == list(skill[:len(buf)]):
            answer += 1

    return answer

 

skill_trees에는 여러 스킬 트리들이 저장되어 있고, 이 각각의 스킬트리들이 skill의 순서대로 놓여있는지 판단해야 한다.

 

선후 관계의 순서가 지켜져야 하니까 처음에는 위상 정렬을 떠올렸다. 스킬트리는 실제로 위상 정렬의 대표적인 예시니까 말이다. 하지만 이 문제는 정렬의 문제가 아니라 제대로 정렬되어 있는지 판단하는 문제이므로 위상 정렬과는 달리 단순한 비교로 끝날 수 있다고 생각했다.

 

A와 B가 있을 때 B가 A 순서대로 놓여있는지 확인하기 위해서는 우선 B의 원소들이 A에 있는지를 확인해야 한다.

A에 존재하는 B의 원소들을 buf 라는 새로운 리스트에 추가한 뒤, 나중에 A와 buf를 비교해서 일치하면 True다.

단, buf ⊂ A 일 수 있으므로 A는 buf의 길이까지만 비교한다. 

'알고리즘 > 문자열' 카테고리의 다른 글

문자열 내 마음대로 정렬하기 (Python)  (0) 2020.07.03

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

def solution(strings, n):
    return sorted(sorted(strings), key=lambda x: x[n])

 

굉장히 짧은 코드이지만 후에 lambda에 대해 이해하기 좋을 것 같아 포스팅해 둔다.

 

map(lambda x: x+2, range(5)) → range(5)에서 하나씩 가져와서 x+2를 한다.

 

sorted(strings, key=lambda x: x[n]) → strings에서 하나씩(x) 가져와서 정렬기준인 key로 삼는데, 그냥 x가 아니라 x[n]을 key로 삼는다.

'알고리즘 > 문자열' 카테고리의 다른 글

스킬트리 (Python)  (0) 2020.07.09

+ Recent posts