159994. 카드 뭉치
2025-12-04
프로그래머스 159994번 풀이
이 글은 Obsidian에서 마이그레이션되었으며, 그 과정에서 AI의 도움을 받았습니다. 오류나 누락된 내용이 있다면 댓글로 알려주세요!
문제
풀이
아이디어
카드는 순서대로만 사용할 수 있다는 제약조건이 있다. 큐를 사용하면 딱이다. 각 카드 뭉치에는 서로 다른 단어만 존재하기 때문에 복잡한 로직 없이 각 카드 뭉치 가장 위의 카드만 확인해서 바로 바로 사용해주면 된다.
goal을 순회하면서 각 단어가 cards1의 맨 앞이나 cards2의 맨 앞에 있다면 해당 카드를 사용(front 인덱스를 증가)하면 된다. 만약 둘 다 아니라면 goal을 만들 수가 없으므로 “No”를 반환한다.
shift()를 사용하면 배열의 남은 요소를 모두 앞으로 이동시켜야 하기 때문에 O(N)의 시간이 더 걸린다. 그래서 front 인덱스를 관리하는 방식을 써서 O(1)로 해결했다.
코드
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';
}