풀이 과정
1. 각각의 케이스마다 선행 스킬 순서(skill)을 queue로 만들어 준다.
2. 각 스킬트리를 문자 순서대로 진행하면서 해당 문자가 선행 스킬 순서 내에 있는지, 있다면 queue의 맨 앞에 있는지를 검사한다.
3. queue의 맨 앞에 없다면, 먼저 나와야 하는 스킬이 아니므로 잘못된 것이므로 break
4. queue의 맨 앞에 있다면, 먼저 나와야 하는 스킬이 맞으므로 queue에서 빼준 다음 다음 문자에 대해 계속 진행한다.
5. 만족하는 스킬 트리의 개수를 리턴하면 된다.
from collections import deque
def solution(skill, skill_trees):
answer = 0
for sk in skill_trees:
queue = deque(skill)
flag = True
for s in sk:
if s in queue:
if queue[0] == s: # 선행스킬이면 큐에서 빼줌
queue.popleft()
else: # 선행스킬이 아니라면 잘못된 것이므로 false
flag = False
break
if flag:
answer += 1
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 2 ] 방문 길이 (0) | 2021.06.30 |
---|---|
[ Lv 2 ] 쿼드압축 후 개수 세기 (0) | 2021.06.30 |
[ Lv 2 ] 이진 변환 반복하기 (0) | 2021.06.29 |
[ Lv 2 ] [1차] 캐시 (0) | 2021.06.28 |
[ Lv 2 ] 점프와 순간 이동 (0) | 2021.06.28 |