코딩테스트 연습

프로그래머스 코딩테스트 연습 - 카드 뭉치 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로 구현하여 문제를 해결할 수 있었다.