RUBY

[프로그래머스] 스킬트리 본문

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 문을 잘 활용하자 
Comments