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

Paek·2023년 3월 1일
0

코테공부

목록 보기
39/44

출처

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

문제


제한조건에 따라 스킬을 올바른 순서대로 잘 익혔는지 검사하는 문제이다.

접근 방법

먼저, 스킬을 앞에서부터 차례로 익혔는지 알기 위해 스킬트리와 관계없는 스킬들은 모두 제거해준다.
그 뒤 skill의 인덱스 번호로 바꿔주고 가장 작은 원소가 0인지, 정렬된 상태와 현재 상태가 같은지, [0, 2] 이런경우를 대비하여 가장 큰 원소와 작은 원소를 빼서 그게 len-1과 동일한지 ( 등차수열인지) 를 검사해주는 과정을 거치도록 하였다.

풀이

def solution(skill, skill_trees):
    answer = 0
    for i in skill_trees:
        arr = list(i)
        find = []
        for j in arr[:]:
            if j not in skill:
                arr.remove(j)
            else:
                find.append(skill.index(j))
        if len(find) <= 1:
            if len(find) == 0:
                answer += 1
            elif find[0] == 0:
                answer += 1     
        else:
            if sorted(find) == find and min(find) == 0:
                if max(find) - min(find) == len(find)-1:
                    answer += 1     
    return answer

+추가 (다른사람의 풀이)

def solution(skill, skill_trees):
    answer = 0
    for tree in skill_trees:
        s = ''
        for i in tree:
            if i in skill:  # 선행스킬에 포함된다면
                s += i
        if skill[:len(s)] == s:  # skill의 앞부터 s의 길이만큼 s와 같다면 
            answer += 1  # 가능한 스킬트리
    return answer

위와 같은 간단하고 깔끔한 풀이도 있어서 첨부해본다.

출처 : https://computer-science-student.tistory.com/651

profile
티스토리로 이전했습니다. https://100cblog.tistory.com/

0개의 댓글