코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다.
코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다.
예를 들어, 첫 번째 카드 뭉치에 순서대로
["i", "drink", "water"],
두 번째 카드 뭉치에 순서대로
["want", "to"]가 적혀있을 때
["i", "want", "to", "drink", "water"] 순서의 단어 배열을 만들고자 한다면,
첫 번째 카드 뭉치에서 "i"를 사용한 후
두 번째 카드 뭉치에서 "want"와 "to"를 사용하고
첫 번째 카드 뭉치에 "drink"와 "water"를 차례대로 사용하면 원하는 순서의 단어 배열을 만들 수 있습니다.
주어진 카드 뭉치(cards1와 cards2)에서 순서대로 카드를 사용하여 목표 단어 배열(goal)을 만들 수 있는지 확인하는 문제입니다.
각 카드는 한 번만 사용할 수 있으며, 카드 뭉치의 순서를 바꿀 수 없다는 점에 유의해야 합니다.
goal 배열을 순회하면서 각 단어가 cards1의 첫 번째 단어인지 또는 cards2의 첫 번째 단어인지를 확인합니다.cards1의 첫 번째 단어라면 cards1에서 그 단어를 제거하고, cards2의 첫 번째 단어라면 cards2에서 그 단어를 제거합니다.goal 배열의 단어가 cards1와 cards2 모두의 첫 번째 단어가 아니라면, 목표 배열을 만들 수 없는 것으로 간주하고 "No"를 반환합니다.위 전략을 바탕으로 코드로 구현해 보겠습니다.
function solution(cards1, cards2, goal) {
let index1 = 0; // cards1의 인덱스
let index2 = 0; // cards2의 인덱스
for (let word of goal) {
if (index1 < cards1.length && cards1[index1] === word) {
index1++;
} else if (index2 < cards2.length && cards2[index2] === word) {
index2++;
} else {
return "No";
}
}
return "Yes";
}
입력 예시 1
console.log(solution(["i", "drink", "water"], ["want", "to"], ["i", "want", "to", "drink", "water"])); // "Yes"
입력 예시 2
console.log(solution(["i", "water", "drink"], ["want", "to"], ["i", "want", "to", "drink", "water"])); // "No"
index1과 index2 변수를 사용하여 cards1와 cards2의 현재 위치를 추적합니다.goal 배열의 각 단어에 대해, 현재 단어가 cards1의 현재 위치 단어와 일치하면 index1을 증가시키고, cards2의 현재 위치 단어와 일치하면 index2를 증가시킵니다.cards1와 cards2 모두의 현재 위치 단어와 일치하지 않으면 "No"를 반환합니다.이 문제는 카드 뭉치에서 주어진 순서대로 단어를 사용하여 목표 단어 배열을 만들 수 있는지 확인하는 문제입니다. 코딩 테스트에서 자주 출제되는 유형으로, 순서와 조건을 잘 파악하고 해결하는 연습이 필요합니다. 이 문제를 통해 배열과 인덱스를 활용하는 방법, 조건문을 통한 로직 구현 방법을 익힐 수 있습니다.