코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다.
코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다.
예를 들어, 첫 번째 카드 뭉치에 순서대로
["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"를 반환합니다.이 문제는 카드 뭉치에서 주어진 순서대로 단어를 사용하여 목표 단어 배열을 만들 수 있는지 확인하는 문제입니다. 코딩 테스트에서 자주 출제되는 유형으로, 순서와 조건을 잘 파악하고 해결하는 연습이 필요합니다. 이 문제를 통해 배열과 인덱스를 활용하는 방법, 조건문을 통한 로직 구현 방법을 익힐 수 있습니다.