코딩테스트/프로그래머스

프로그래머스 카드 뭉치

의현 2025. 4. 7. 17:03

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/159994


문제 풀이

배열의 첫 번째에 있는 값들은 순차적으로 꺼내면서 최종적인 goal을 만들 수 있는지 확인

만약 배열의 첫 번째 값을 사용했다면 shift()를 사용해 해당 배열의 첫 번째 원소를 꺼냄 (shift는 원본 배열을 수정하기 때문에 첫 번째 원소가 사라짐)

만약 cards1, cards2로 특정 단어(word)를 만들 수 없다면 goal을 만들 수 없으므로 'No'를 리턴

function solution(cards1, cards2, goal) {
    for (let word of goal) {
        if (cards1[0] === word) {
            cards1.shift();
        } else if (cards2[0] === word) {
            cards2.shift();
        } else {
            return 'No';
        }
    };
    
    return 'Yes';
}

결론

<return 주의사항>

forEach문에서는 return을 할 경우 반복문 자체가 종료되지 않음 -> forEach가 내부적으로 콜백 함수를 실행하며, 해당 콜백의 반환값이 전체 메서드에 영향을 주지 않기 때문

반복문에서 종료를하고 싶다면 forEach가 아닌 for ... of문을 사용하는게 적합하다.

// forEach에서 return은 반복 중단 불가
[1, 2, 3].forEach((item) => {
    if (item === 2) {
        return; // 콜백만 종료, 다음 아이템으로 이동
    }
    console.log(item); // 출력: 1, 3
});

// 해결 방법: for...of 사용
for (const item of [1, 2, 3]) {
    if (item === 2) {
        break; // 반복 중단 가능
    }
    console.log(item); // 출력: 1
}