def solution(skill, skill_trees):
answer = 0
s = list(skill[:i] for i in range(1,len(skill)+1))
sk = list(skill)
for st in skill_trees:
sa = '';j=0
stt = list(st)
for i in stt:
if i in sk:
if i != skill[j]:
break
else:
sa+=i
j+=1
if sa in s:
answer += 1
return answer
처음엔 이렇게 작성했는데 완전 다 틀림.. 처음 풀이한 방법은 이렇다.
"CBD"일 경우 C, CB, CBD만 가능하니까 이걸 s로 두고, sk에는 C, B, D를 넣었다. ["BACDE", "CBADF", "AECB", "BDA"]는 for문으로 돌면서 list로 변경시킨 다음, 한 알파벳이 sk 내에 있을 때 그 값을 sa라는 문자열에 더하는 것이다.
for문을 전부 돈 문자열이 s에 있으면 answer+=1을 취해 답을 구하는데 이렇게 풀이하니 40점대밖에 안나옴... 흑..
그래서 예외처리가 있을 것이라 생각했고 열심히 머리를 굴려봤다.
그리고 얻어낸 답은 아래와 같다.
def solution(skill, skill_trees):
answer = 0
s = list(skill[:i] for i in range(1,len(skill)+1))
sk = list(skill)
for st in skill_trees:
sa = '';j=0
stt = list(st)
for i in stt:
if i in sk:
sa+=i
if sa in s:
answer += 1
elif sa == '':
answer += 1
return answer
포인트는 sa가 공란일 때였다.
CBD가 없을 때, 즉 스킬트리가 ANE 이렇게 이루어져있을 때는 CBD를 고려하지 않아도 되기 때문에 sa는 공란이 될 수 밖에 없고, 이때도 answer += 1을 해줘야하는 것이었다!