프로그래머스 문제입니다.
문제
https://school.programmers.co.kr/learn/courses/30/lessons/159994
cards1 , cards2 리스트 안에 있는 문자열을 통해 goal 리스트를 완성시키는 문제였습니다.
처음에는 아래 코드 처럼 goal 리스트를 pop()하며 거꾸로 완성시키려 했으나 일부 테스트케이스에서 실패가 되었습니다.😣😣😣
[나의 풀이1]
(실패)
def solution(cards1, cards2, goal):
answer = ''
cnt = len(goal)
while cnt > 0 :
target = goal.pop()
print(target)
if len(cards1) != 0 and cards1[-1] == target:
cards1.pop()
elif len(cards2) != 0 and cards2[-1]== target:
cards2.pop()
else:
answer = "No"
print(answer)
return answer
cnt -= 1
answer = "Yes"
print(answer)
return answer
그 이유는 입력값이
solution(["i", "drink", "water"], ["want", "to", "juice"], ["i", "want", "to", "drink", "water"])
일 때처럼 두 카드 더미를 통해 완성시킬 수 있지만 카드 더미 맨끝부분에 필요없는 문자열일 경우 완성시킬 수 없다라고 판명하기 때문입니다. 그리하여 카드더미 앞에서 부터 뽑아낼 수 있도록 popleft()하여 해결하였습니다.🐹🐹🐹
[나의 풀이2]
(성공)
def solution(cards1, cards2, goal):
answer = ''
cnt = len(goal)
while cnt > 0 :
target = goal.pop()
print(target)
if len(cards1) != 0 and cards1[-1] == target:
cards1.pop()
elif len(cards2) != 0 and cards2[-1]== target:
cards2.pop()
else:
answer = "No"
print(answer)
return answer
cnt -= 1
answer = "Yes"
print(answer)
return answer
저의 풀이 이외에 아래와 같이 카드 더미를 변형시키지 않고 인덱스를 활용하여 해결한 풀이를 볼 수 있었습니다.
[다른 사람의 풀이]
def solution(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"
감사합니다.🐤🐤🐤