코딩테스트/프로그래머스
프로그래머스 카드 뭉치
의현
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
}