[프로그래머스 코딩테스트 연습문제] 카드 뭉치 | 알고리즘 설명 & 문제 풀이 with 자바스크립트(Javascript)

Re_Go·2023년 12월 27일
0

코딩테스트연습

목록 보기
46/106
post-thumbnail

1. 문제 설명

2. 제한사항

3. 입출력 예

4. 입출력 예 설명

5. 첫번째 문제 풀이(2023-12-27)

이 문제의 경우 goal의 배열을 for문으로 돌려서 각 cards1과 cards2의 가장 앞 카드의 단어들로 goal의 문장을 완성할 수 있을지에 대한 문제입니다.

즉 goal의 "i" 라는 첫번째 단어를 cards1와 cards2의 맨 앞 카드를 꺼내어 "i"를 완성할 수 있고, "i"는 꺼내어 졌으니 shift로 cards1의 "i"를 없애준 후

다음 "want" 문장을 완성하기 위해 cards1의 앞 카드인 "drink"와 cards2의 "want"를 꺼내어 cards2의 "want"로 두번째 단어를 완성한 후 역시 cards2의 앞카드인 "want"를 shift 하는 방식으로 전개를 하면 됩니다.

function solution(cards1, cards2, goal) {
    let compareGoal = []

    for(let i = 0 ; i < goal.length ; i++){
        if(cards1[0] === goal[i]){
          compareGoal.push(cards1[0])
            cards1.shift();
        } 
        else if(cards2[0] === goal[i]){
          compareGoal.push(cards2[0])  
            cards2.shift();
        } 
        else break;
    }
    let result = goal.join('') === compareGoal.join('') ? "Yes" : "No"
    return result;   
}

번외로 while문으로도 가능하지 않을까? 싶어서 해봤는데 테스트 케이스 딱 하나 빼고 실패를 해버려서 뭐가 문제인지 좀 찾아보고 해봐야 하지 않을까 싶습니다.

function solution(cards1, cards2, goal) {
    let compareGoal = []

    let i = 0;
 
    while(Math.max(cards1, cards2) !== 0){
        if(cards1[0] === goal[i]){
          compareGoal.push(cards1[0])
            cards1.shift();
        } 
        else if(cards2[0] === goal[i]){
          compareGoal.push(cards2[0])  
            cards2.shift();
        } 
        else break;
        i++;
    }
    let result = goal.join('') === compareGoal.join('') ? "Yes" : "No"
    return result; 
}
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글