프로그래머스_스킬트리

임정민·2024년 1월 17일
0

알고리즘 문제풀이

목록 보기
145/173
post-thumbnail

프로그래머스 Lv2 구현 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.

문제

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

[나의 풀이]

⌛ 12분


def solution(skill, skill_trees):
    answer = len(skill_trees)
    
    for skill_tree in skill_trees:
        skill_set = set(skill)
        tmp = []
        
        for x in skill_tree:
            if x in skill_set:
                tmp.append(x)
                
        tmp = "".join(tmp)
        
        for i in range(len(tmp)):
            if tmp[i]!=skill[i]:
                answer -= 1
                break
            
    return answer

배워야하는 스킬 순서(skill)과 유저가 만든 스킬트리들(skill_trees)가 입력될 때, 가능한 스킬트리의 갯수를 판별하는 문제입니다.🐈🐈🐈

먼저 유저가 만든 스킬트리들(skill_trees)가 모두 가능하다고 가정하고 answer를 최댓값으로 지정합니다.

각 스킬트리(skill_tree)에서 하나하나 배워야하는 스킬 순서(skill)를 확인해야하므로 먼저 2중 for문으로 구현해준 뒤, 현재 스킬이 set형태의 배워야하는 스킬(skill_set) 목록에 있다면 순서대로 추가해줍니다(tmp).

이후 tmp를 배워야하는 스킬 순서(skill)와 비교하며 순서가 하나라도 다를 시 이를 answer에서 제거하는 방식입니다.

[다른 사람의 풀이1]


def solution(skill, skill_trees):
    answer = 0

    for skills in skill_trees:
        skill_list = list(skill)

        for s in skills:
            if s in skill:
                if s != skill_list.pop(0):
                    break
        else:
            answer += 1

    return answer

list.pop(0) 과, for-else문을 활용한 풀이입니다.

먼저 유저가 만든 스킬트리들(skills), 각 스킬트리의 스킬을 돌기 위해 2중 for문을 구현하여 배워야하는 스킬 순서(skill_list)를 확인하는데는 동일하지만, 이 배워야하는 스킬 순서(skill_list)를 확인할 때 list.pop(0)하여 확인함과 동시에 제거하는 방식이 달랐습니다.🦢🦢🦢

또 for - else 문법은 처음보는 형태였는데 for문이 break없이 돌아갔을 때 실행되는 것으로, 배워야하는 스킬 순서가 모두 맞았을 때 answer에 추가하는 식이였습니다.

[다른 사람의 풀이2]


def solution(skill, skill_trees):
    count = 0
    for skill_tree in skill_trees:
        s = ""                      # 하나의 스킬트리를 뽑을 때마다 s 초기화
        for ch in skill_tree:       
            if ch in skill:         # 스킬트리 중에 skill이 있다면 s에 추가
                s += ch
        
        if skill[:len(s)] == s:     # 만든 s를 기준으로 skill과 같다면 count += 1
            count += 1
    
    return count

배워야하는 스킬 순서(skill)과 유저가 만든 스킬트리에서의 배워야 하는 스킬(s)을 비교할 때 s의 크기를 기준으로 인덱싱하여 구현한 풀이입니다.🐵🐵🐵

감사합니다.

profile
https://github.com/min731

0개의 댓글