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
위와 같은 간단하고 깔끔한 풀이도 있어서 첨부해본다.