PS/Programmers
[프로그래머스] 스킬트리
RUBY_루비
2020. 10. 14. 23:59
출처:: programmers.co.kr/learn/courses/30/lessons/49993?language=python3
분류::
1. 문제 이해 및 해결과정
- 스킬트리의 순서대로 끝까지 스킬을 완료하지 않아도 된다. skill=cde tree=bcd 인 경우가 가능하다 |
2. 풀이방법
1. [ python ]
def solution(skill, skill_trees):
cnt=0
for x in skill_trees:
tmp="" #트리 중 skill에 있는 문자만 저장
for i in range(len(x)):
if x[i] in skill: #skill에 있는 문자라면 tmp에 더해줌
tmp+=x[i]
# print(tmp)
flag=True
for i in range(len(tmp)): #tmp길이 만큼
if skill[i]!=tmp[i]: #tmp와 skill의 순서가 같지 않으면
flag=False #스킬트리 아님
if flag==True:
cnt+=1
return cnt
2. [ python ] str.find()함수를 이용한 방법
def solution(skill, skill_trees):
cnt=0
for x in skill_trees:
tmp="" #트리 중 skill에 있는 문자만 저장
for i in range(len(x)):
# if x[i] in skill: #skill에 있는 문자라면 tmp에 더해줌
# tmp+=x[i]
if skill.find(x[i])!=-1: #skill에 없는 문자라면 인덱스 -1을 반환한다
tmp+=x[i]
# print(tmp)
flag=True
for i in range(len(tmp)): #tmp길이 만큼
if skill[i]!=tmp[i]: #tmp와 skill의 순서가 같지 않으면
flag=False #스킬트리 아님
if flag==True:
cnt+=1
return cnt
3. [ python ] list.pop() 을 이용하는 방법
def solution(skill, skill_trees):
cnt=0
for x in skill_trees:
seq=list(skill) #skill을 리스트로
for i in range(len(x)):
if x[i] in skill: #트리의 문자가 skill에 있으면
if seq.pop(0)!=x[i]: #현재 skill순서와 트리의 문자가 같지않으면 순서오류
break
else: #멈추지 않고 수행되었을 경우, 순서가 모두 맞는 것이다.
cnt+=1
return cnt
3. 오답원인
4. 알게된 점
str.find(문자)
- str에 찾고자하는 문자가 있다면 index를 반환한다
- str에 찾고자하는 문자가 없으면 -1을 반환한다.
- str.find(문자, 시작위치)
for-else 문을 잘 활용하자