소요 시간 1시간 30분, 풀다 못하겠어서 다른 사람 풀이 참조함.
무작위로 이뤄진 문자열(A)에 포함된 특정 문자열(B)의 문자들이 그 특정 문자열(B)의 순서를 지키는지 검사하는 문제였다.
A = "awegd", B = "ag" → A의 a,g가 B의 순서를 지키고 있다.
A = "gwaed", B = "ag" → A의 a,g가 B의 순서를 지키고 있지 않다.
나의 풀이
from collections import deque
def solution(skill_order, skill_trees):
answer = len(skill_trees)
skill_order = skill_order
for skill_tree in skill_trees:
skill_order_queue = deque(skill_order)
for skill in skill_tree:
if skill in skill_order_queue:
if skill != skill_order_queue.popleft():
answer -= 1
break
return answer
나의 풀이 설명
- collections 모듈의 deque를 사용했다.
- 모든 스킬트리가 정답이라고 가정해 초기화한다.
- 스킬트리를 하나씩 검사한다.
- 선행 스킬트리가 담긴 큐를 스킬트리를 검사할 때마다 생성한다.
- 스킬트리 안의 스킬을 하나씩 검사한다.
- 그 스킬이 선행 스킬트리 큐에 있다면,
- 선행 스킬트리 큐의 가장 왼쪽 값(popleft)과 비교한다.
- 비교 결과, 다르다면 비정상이므로 정답 갯수를 하나 감소시킨다.
- 다음 스킬트리를 검사한다.
- 선행 스킬트리 큐의 가장 왼쪽 값(popleft)과 비교한다.
새롭게 알게된 것
- 파이썬에는 for else 문법이 있다.
- deque를 만들 때 리스트만 deque로 감쌀 수 있는 게 아니라 문자열도 된다. 문서를 보면 iterable 데이터면 다 되는 것 같다. iterable은 무엇이냐? 하면 여기를 보면 된다.
'프로그래밍-학습기록 > 코딩테스트' 카테고리의 다른 글
프로그래머스 | 파이썬 | 문자열 압축 (0) | 2020.12.28 |
---|---|
프로그래머스 | python | 괄호 변환 | 용기의 문제 (0) | 2020.12.24 |
프로그래머스 | python | level 2 | 올바른 괄호 (0) | 2020.12.22 |
프로그래머스 | python | level 2 | 다리를 지나는 트럭 (0) | 2020.12.22 |
프로그래머스 | python | level 2 | 튜플 | 어거지로 풀고 공부하기 (0) | 2020.12.21 |