[프로그래머스 Lv2] 스킬트리(python)

이진규·2022년 1월 19일
1

프로그래머스(PYTHON)

목록 보기
25/64

문제

https://programmers.co.kr/learn/courses/30/lessons/49993

나의 코드 (답안참조)

"""
1. 아이디어
어떻게 풀어야 할지 감이 안왔다. 숫자로 바꿔놓고 더하면서 차이가 나는걸 구하면 되나 
집합으로 바꿔서 풀어야 하나 했는데 둘다 아니였다..

2. 시간복잡도
O(n^3)인데 n의 범위가 워낙 작아서 상관은 없는 거 같다.
"""

def solution(skill, skill_trees):
    
    answer = 0
    
    for skills in skill_trees:
        skill_list = list(skill) # 리스트로 바꿔서
        
        for x in skills:
            if x in skill:
                if x != skill_list.pop(0): # skill안에 있는 문자인데 순서대로 맞지 않으면 break한다.
                    break
        else:
            answer += 1
    
    return answer
    

다른 사람의 코드

"""
가독성이 뛰어나서 들고 왔다!
"""

def solution(skill,skill_tree):
    answer=0
    for i in skill_tree:
        skillist='' # 빈 문자열을 만들어서
        
        for z in i:
            if z in skill:
                skillist += z # 만약 skill안에 존재하면 빈 문자열에 집어 넣고
        
        if skillist==skill[0:len(skillist)]: # 추가된 문자열 크기만큼 비교한다.
            answer+=1
    
    return answer

다시 풀이한 코드


# 복잡하게도 풀었다.. ㅋㅋㅋㅋㅋ

def solution(skill, skill_trees):
    
    answer = 0
    
    for i in skill_trees:
        
        skill_collect = list(skill)
        flag = True
        
        for j in i:
            if skill_collect and (j in skill_collect):
                if skill_collect[0] == j:
                    skill_collect.pop(0)
                else:
                    flag = False
                    break
            
        if not skill_collect or flag:
            answer += 1
                
    return answer

또 다시 풀이한 코드


def solution(skill, skill_trees):
    
    tmp = []
    
    for i in skill_trees: # skill 안에 있는 문자열이 아닌거는 다 지운다.
        tmp2 = ""
        
        for j in i:
            
            if j in skill:
                tmp2 += j
        
        tmp.append(tmp2)
    
    answer = 0
    for i in tmp: # skill과 순서대로 비교하면서 문자가 서로 틀리면 break하고 다 맞으면 개수를 +1 해준다.
        n = len(i)
        
        for j in range(n):
            if skill[j] != i[j]:
                break
        else:
            answer += 1
            
    return answer
                    

느낀점

문제를 많이 풀어 보는 수 밖에..

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글

관련 채용 정보