문제: https://programmers.co.kr/learn/courses/30/lessons/49993
일단 answer에 skill_trees의 개수를 선언한 후, 불가능한 스킬트리를 발견할 때마다 -1씩 해주었다.
불가능한 스킬트리를 만났을 경우, 해당 스킬트리에 대한 for문을 완전히 break 해주기 위해 avail이라는 bool 형을 통해 체크했다.
def solution(skill, skill_trees):
answer = len(skill_trees)
for skill_tree in skill_trees:
avail = True
for index, s in enumerate(skill_tree):
if s in skill:
for prev in skill.split(s)[0]:
if not prev in skill_tree[:index]:
answer -= 1
avail = False
break
if not avail:
break
return answer
for문에도 else 문이 가능한 것을 알게해준 코드다. for 문에 else를 달면 해당 for문이 break 되지 않고 정상종료됐을 때 else 문이 실행된다.
pop을 이용해서 아주 깔끔하게 푸셨다.
s가 skill 안에 존재한다면 항상 skill 문자열 중 첫 번째 문자와 일치해야 한다는 점을 이용한 풀이다.
def solution(skill, skill_trees):
answer = 0
for skills in skill_trees:
skill_list = list(skill)
for s in skills:
if s in skill:
if s != skill_list.pop(0):
break
else:
answer += 1
return answer