IndexError
IndexError: pop from an empty deque
cards1
와 cards2
의 모든 단어들을 꺼내 빈 큐가 되었음에도 popleft()
해서 오류가 났다. cards1
와 cards2
가 비어있지 않은지 확인한 후 꺼내도록 바꾸어야 한다.# IndexError: pop from an empty deque
def solution(cards1, cards2, goal):
cards1 = deque(cards1)
cards2 = deque(cards2)
pop1 = cards1.popleft()
pop2 = cards2.popleft()
for card in goal:
if pop1 == card:
pop1 = cards1.popleft()
elif pop2 == card:
pop2 = cards2.popleft()
else:
return "No"
return "Yes"
from collections import deque
def solution(cards1, cards2, goal):
cards1 = deque(cards1)
cards2 = deque(cards2)
pop1 = cards1.popleft()
pop2 = cards2.popleft()
for card in goal:
if pop1 == card:
if cards1: pop1 = cards1.popleft()
elif pop2 == card:
if cards2: pop2 = cards2.popleft()
else:
return "No"
return "Yes"
카드뭉치에서 순서대로 한 장씩 사용하므로 큐를 떠올렸다.
두 개의 카드뭉치에서 가장 앞에 있는 단어를 꺼내 goal
의 단어와 같은지 순서대로 확인한다.
큐 안의 단어들을 popleft()
로 꺼내 확인할 필요없이
인덱싱으로 값을 먼저 확인한후에 popleft()
로 꺼내 제거한다.
from collections import deque
def solution(cards1, cards2, goal):
cards1 = deque(cards1)
cards2 = deque(cards2)
for card in goal:
if cards1 and cards1[0] == card:
cards1.popleft()
elif cards2 and cards2[0] == card:
cards2.popleft()
else:
return "No"
return "Yes"
cards[0]
으로 첫번째 값을 확인한 후, 인덱스0의 값 제거하기 cards.pop(0)
def solution(cards1, cards2, goal):
for card in goal:
if len(cards1) > 0 and card == cards1[0]:
cards1.pop(0)
elif len(cards2) >0 and card == cards2[0]:
cards2.pop(0)
else:
return "No"
return "Yes"
두 카드 배열은 바뀌지 않고, 비교할 단어의 인덱스를 변수로 담아 포인터처럼 사용한다.
idx1
과 idx2
는 cards1
과 cards2
리스트에서 현재 검사 중인 단어의 위치를 나타낸다.
def solution3(cards1, cards2, goal):
idx1,idx2 = 0,0
for word in goal:
if len(cards1)>idx1 and cards1[idx1]==word:
idx1+=1
elif len(cards2)>idx2 and cards2[idx2]==word:
idx2+=1
else:
return "No"
return "Yes"