## 🌟 문제
[코딩테스트 연습 - 카드 뭉치 \| 프로그래머스 스쿨](https://school.programmers.co.kr/learn/courses/30/lessons/159994)
두 개의 카드 뭉치에서 카드를 순서대로만 사용해서 원하는 단어 배열을 만들 수 있는지 확인하는 문제
## 🌟 풀이
카드는 순서대로만 사용할 수 있다는 제약조건이 있다. 큐를 사용하면 딱이다.
각 카드 뭉치에는 서로 다른 단어만 존재하기 때문에 복잡한 로직 없이 각 카드 뭉치 가장 위의 카드만 확인해서 바로 바로 사용해주면 된다.
goal을 순회하면서 각 단어가 cards1의 맨 앞이나 cards2의 맨 앞에 있다면 해당 카드를 사용(front 인덱스를 증가)하면 된다. 만약 둘 다 아니라면 goal을 만들 수가 없으므로 "No"를 반환한다.
shift()를 사용하면 배열의 남은 요소를 모두 앞으로 이동시켜야 하기 때문에 O(N)의 시간이 더 걸린다. 그래서 front 인덱스를 관리하는 방식을 써서 O(1)로 해결했다.
```javascript
function solution(cards1, cards2, goal) {
let front1 = 0;
let front2 = 0;
let len1 = cards1.length;
let len2 = cards2.length;
for (let idx = 0; idx < goal.length; idx++) {
const target = goal[idx];
if (front1 < len1 && cards1[front1] === target) front1++;
else if (front2 < len2 && cards2[front2] === target) front2++;
else return 'No';
}
return 'Yes';
}
```