코딩테스트 연습
프로그래머스 코딩테스트 연습 - 카드 뭉치 JavaScript
citron031
2023. 2. 25. 10:18
이번 문제는 순서대로 접근하며 해당 케이스가 가능한지 확인하는 문제로, 분기가 갈릴 수 있으므로 이를 놓치지 않는 게 중요하다고 생각하였다.
function solution(cards1, cards2, goal) {
const dfs = (idx1, idx2, goalIdx) => {
if(goalIdx === goal.length) {
return true;
}
if(cards1[idx1] === goal[goalIdx]) {
if(cards2[idx2] === goal[goalIdx]) {
return dfs(idx1 + 1, idx2, goalIdx + 1) ||
dfs(idx1, idx2 + 1, goalIdx + 1);
} else {
return dfs(idx1 + 1, idx2, goalIdx + 1);
}
} else if(cards2[idx2] === goal[goalIdx]) {
return dfs(idx1, idx2 + 1, goalIdx + 1);
}
return false;
}
return dfs(0, 0, 0) ? "Yes" : "No";
}
각 카드 뭉치는 순서대로만 접근할 수 있으므로, 1번과 2번의 카드가 모두 동일한 카드가 있고, 이 때 두 선택지가 발생할 수 있는데 모든 경우의 수를 고려해야 한다.
단순하게 DFS로 구현하여 문제를 해결할 수 있었다.