카드 뭉치 프로그래머스

Y b·2023년 8월 4일
0
post-thumbnail

문제요약

cards1과 cards2에 적힌 단어들로 goal를 만들 수 있다면 "Yes"를, 만들 수 없다면 "No"를 return하는 solution 함수를 완성해주세요.

문제 풀이 원리

차례대로 사용한다는 점을 활용하며,
for문을 쓰되 ++를 활용한다.

casecards1cards2goalresult
case 1["i", "drink", "water"]["want", "to"]["i", "want", "to", "drink", "water"]"Yes"
case 2["i", "water", "drink"]["want", "to"]["i", "want", "to", "drink", "water"]"No

예시를 들어 순서대로 뽑아 goal과 매치한다면,
i가 첫 번째, want가 두 번째, to가 세 번째..처럼
각 카드에서 요소를 뽑을 때도 순서대로 사용해야 한다.

문제 풀이 시도

1) 처음에 문제를 잘못 이해해서
무작정 cards1의 i 뒤에 cards2를 넣도록 했다.

function solution(cards1, cards2, goal) {
    var answer = '';
    for(let i =0; i<cards2.length; i++){
    cards1.splice(1+i,0,cards2[i])

    }
    
        return (goal===cards1)? "Yes":"No"

    
    return answer;
}

당연히 실패를 했고, 다시 문제를 풀려고 시도했다.

2)
return 뒤에 goal과 cards를 for문으로 돌려 보기도 하고,
card라는 배열을 따로 만들어 goal과 비교도 해봤지만 실패했다.

내용이 날라가서.. 직접 적는다.

3) 최종적으로 시간이 부족하여 실패했고
1번 문제 풀이 시도를 바탕으로 gpt의 도움을 받아 만들긴 했지만
필요없는 요소가 많은 코드가 되었다.
하드코딩,,

function canFormGoal(cards1, cards2, goal) {
    if (goal.length === 0) {
        return true; // goal 배열이 비었으면 모든 단어를 사용한 것이므로 가능한 경우
    }

    const firstWord = goal[0];
    if (cards1[0] === firstWord) {
        const newCards1 = cards1.slice(1); 
        const newGoal = goal.slice(1); 
        if (canFormGoal(newCards1, cards2, newGoal)) {

            return true;
        }
    }

    if (cards2[0] === firstWord) {

        const newCards2 = cards2.slice(1); 
        const newGoal = goal.slice(1);
        if (canFormGoal(cards1, newCards2, newGoal)) {

            return true;
        }
    }

    return false; 
}

function solution(cards1, cards2, goal) {
    return canFormGoal(cards1, cards2, goal) ? "Yes" : "No";
}

다른 팀원분의 문제풀이

function solution(cards1, cards2, goal) {
    let x = 0;
    let y = 0;
    for(let i = 0; i < goal.length; i++) {
       if(goal[i] === cards1[x]) x++
       else if (goal[i] === cards2[y]) y++
       else return "No" 
    }
    return "Yes";
}

for문을 돌리되, cards들의 길이를 따로 지정하지 않고 x++ y++로 비교했다.
if문의 활용도 다시 배웠다.
새로운 배열을 만들지 않아도 cards들의 요소들 모두를 비교하고
no와 yes를 나오도록 할 수 있다.

조건이 충족되지 못하는 경우에 no가 나오도록 했으므로,
이외의 경우는 yes가 되므로 이 경우 goal 배열을 만들기 위한 조합이
cards 배열들에서 가능하다는 것을 의미한다.

ㅠ,ㅠ 많이 어려운 문제이다....

profile
웹 개발자

0개의 댓글

관련 채용 정보