Lv2. 스킬트리

Hello·2022년 8월 13일
0

코딩테스트 연습 > 스킬트리

1. 풀이 설명

  • skill_trees 를 하나씩 돌면서(t) 아래 조건을 만족할 때 answer 개수를 +1 하여 반환한다.
  1. skill 을 list 로 변환한 후(list_skill)
  2. t 의 현재 순서가 list_skill 에 포함되지 않거나, 포함된다면 0번째에 위치하여야 한다.

2. 나의 풀이

python

def solution(skill, skill_trees):
    answer = 0
    for tree in skill_trees:
        success = True
        list_skill = list(skill)
        for t in tree:
            if t in list_skill:
                if t != list_skill.pop(0):
                    success = False
                    break
        if success:
            answer += 1
    return answer

3. 배운점

  • 다른 사람들의 풀이를 보면서 많이 배운 문제다.
  1. for-else 문: flag success 변수를 없앨 수 있다.

for문 중간에 break 로 빠져나올 때가 있다.
break 문으로 빠져나오지 않았다면 for-else 문의 else 문으로 들어가게 된다.

  1. 개선된 코드
def solution(skill, skill_trees):
    answer = 0
    for tree in skill_trees:
        list_skill = list(skill)
        for t in tree:
            if t in list_skill:
                if t != list_skill.pop(0):
                    break
        else:
            answer += 1
    return answer
  1. list 대신 deque 을 사용할 수 있다: deque.popleft()
import collections

def solution(skill, skill_trees):
    answer = 0
    for tree in skill_trees:
        deque = collections.deque(skill)
        for t in tree:
            if t in deque:
                if t != deque.popleft():
                    break
        else:
            answer += 1
    return answer
  1. string to char(string) list
str = "CBD"

list(str) # ['C', 'B', 'D']
profile
안녕하세요 :)

0개의 댓글