문제
내 코드
def solution(skill, st):
answer = []
skill = list(skill)
for i in range(len(st)):
st[i] = list(st[i])
temp = []
for j in st[i]:
if (j in skill):
temp.append(j)
answer.append(temp)
cnt = len(answer)
for i in answer:
temp_skill = skill[:]
for j in i:
if (j == temp_skill[0]):
del temp_skill[0]
else:
cnt -= 1
break
return cnt
풀이
- skill 문자열을 하나하나 리스트로 분리
- for문
a) skill_tree에 있는 문자열을 하나하나 리스트로 분리
b) skill 안에 있는 skill_tree의 문자 모음 리스트를 answer에 추가한다.
- for문
if문
a) answer와 skill[0]을 비교해서 같으면 skill[0]을 삭제한다.
b) 다르면 cnt를 1 감소시킨다.
- cnt를 리턴한다.
효율적인 코드
def solution(skill, skill_tree):
answer = 0
for i in st:
basket = ''
for z in i:
if z in skill:
basket = basket + z
if (basket == skill[0: len(basket)] ):
answer += 1
return answer
피드백
- 나는 중복되지 않는 문자를 제거하고, skill과 skill_tree를 하나하나 비교해야 해서 2중 for문을 두번 썼다.
- 하지만 위 코드에서는 동일한 문자를 basket에 담고 basket과 skill을 비교해서 2중 for문을 1번만 썼다. 길이가 다름을 고려해 basket의 길이까지만 비교했다.