이 문제의 경우 goal의 배열을 for문으로 돌려서 각 cards1과 cards2의 가장 앞 카드의 단어들로 goal의 문장을 완성할 수 있을지에 대한 문제입니다.
즉 goal의 "i" 라는 첫번째 단어를 cards1와 cards2의 맨 앞 카드를 꺼내어 "i"를 완성할 수 있고, "i"는 꺼내어 졌으니 shift로 cards1의 "i"를 없애준 후
다음 "want" 문장을 완성하기 위해 cards1의 앞 카드인 "drink"와 cards2의 "want"를 꺼내어 cards2의 "want"로 두번째 단어를 완성한 후 역시 cards2의 앞카드인 "want"를 shift 하는 방식으로 전개를 하면 됩니다.
function solution(cards1, cards2, goal) { let compareGoal = [] for(let i = 0 ; i < goal.length ; i++){ if(cards1[0] === goal[i]){ compareGoal.push(cards1[0]) cards1.shift(); } else if(cards2[0] === goal[i]){ compareGoal.push(cards2[0]) cards2.shift(); } else break; } let result = goal.join('') === compareGoal.join('') ? "Yes" : "No" return result; }
번외로 while문으로도 가능하지 않을까? 싶어서 해봤는데 테스트 케이스 딱 하나 빼고 실패를 해버려서 뭐가 문제인지 좀 찾아보고 해봐야 하지 않을까 싶습니다.
function solution(cards1, cards2, goal) { let compareGoal = [] let i = 0; while(Math.max(cards1, cards2) !== 0){ if(cards1[0] === goal[i]){ compareGoal.push(cards1[0]) cards1.shift(); } else if(cards2[0] === goal[i]){ compareGoal.push(cards2[0]) cards2.shift(); } else break; i++; } let result = goal.join('') === compareGoal.join('') ? "Yes" : "No" return result; }